7

这个答案表明声明一个强制 anumber作为键的映射是有效的。

但是,当我在操场上尝试以下操作时,出现错误。

class Foo
{
    stringMap: { [s: string]: string; } = {};
    numberMap: { [s: number]: string; } = {};
}

numberMap生成以下编译器错误:

无法转换'{}''{ [s: number]: string; }':类型的索引签名'{}'并且'{ [s: number]: string; }'不兼容{}

声明这个的正确方法是什么?

4

1 回答 1

11

我不是 100% 确定这是否是一个错误(我需要检查规范),但作为一种解决方法这样做绝对可以:

class Foo
{
    stringMap: { [s: string]: string; } = {};
    numberMap: { [s: number]: string; } = <any>{};
}

如果某些东西可以按数字索引,您通常会使用[]而不是{},但这显然取决于您。

于 2013-02-21T04:15:41.010 回答