我正在尝试定义类似字典的类型。我无法弄清楚如何让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获得相同的结果。
答案 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 ;;