打字稿严格的数组和字典

时间:2015-09-15 21:25:49

标签: dictionary typescript

我正在尝试定义类似字典的类型。我无法弄清楚如何让Typescript编译器严格检查密钥类型。

var map: {[hello:number]: string} = {}
// I get the same results if I declare: var map: string[] = []

map[1.1] = "hello";
map[1.1] = 1.1;                 // error (as expected)
map["hello"] = "hello";         // missing error on key
map["hello"] = 1.1;             // missing error on key
var s2: string = map[1.1];
var i2: number = map[1.1];      // error (as expected)
var s1: string = map["hello"];  // missing error on key
var i1: number = map["hello"];  // missing error on key

我使用Typescript 1.5.3和1.6.0-beta获得相同的结果。

2 个答案:

答案 0 :(得分:2)

  

我无法弄清楚如何让Typescript编译器严格检查密钥类型。

TypeScript中始终允许

string索引。这是为了模仿这样一个事实,即即使你说你是按number 索引,你实际上是按string 索引(foo[1]与{相同} {1}})

但是,您可以对foo['1']以及string指定限制。但请注意,它必须与number一致,因为毕​​竟number将在运行时转换为字符串。这消除了上述两个错误情况:

number

答案 1 :(得分:-1)

我制作了自己的字典类型,适用于下拉菜单(我使用的是剑道UI中的kendo下拉菜单):

type Dictionary = Array< {key:string,value:string}&gt ;;