这本字典或哈希表是 Typescript 中的吗?

won*_*rld 1 typescript

以下代码来自 ngrx 示例。

这个声明会做什么?这相当于 C# 中的字典或哈希表吗?

let typeCache: { [label: string]: boolean } = {};

原始代码:

let typeCache: { [label: string]: boolean } = {};

export function type<T>(label: T | ''): T {
  if (typeCache[<string>label]) {
    throw new Error(`Action type "${label}" is not unique"`);
  }

  typeCache[<string>label] = true;

  return <T>label;
}
Run Code Online (Sandbox Code Playgroud)

Nit*_*mer 5

我不确定 C# 的等价性,但它在 typescript 中的含义是具有布尔属性的常规 javascript 对象,它被称为Indexable Types
键只能是字符串或数字,这不会编译:

let typeCache: { [label: Date]: boolean } = {}; // error: An index signature parameter type must be 'string' or 'number'
Run Code Online (Sandbox Code Playgroud)

值的外观示例:

type Indexable = { [label: string]: boolean };

let typeCache1: Indexable = { a: true, b: false };
let typeCache2: Indexable = { a: true, b: "string" }; // error: Type '{ a: true; b: "string"; }' is not assignable to type 'Indexable'
Run Code Online (Sandbox Code Playgroud)