2017-03-04 50 views
0

以下代码来自ngrx示例。这是DictionaryScript中的字典还是散列表?

这个声明会做什么?这相当于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; 
} 

回答

2

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

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' 
0

这是地图在JavaScript中,一个简单的键/值映射。有关详细信息,请参阅here

+0

不,他不问了'地图:值会是什么样子

let typeCache: { [label: Date]: boolean } = {}; // error: An index signature parameter type must be 'string' or 'number' 

例子',他正在使用一个常规物体。 –