TypeScript + ES6 Map +对象类型的索引签名隐式具有"任意"类型

Ast*_*One 10 typescript ecmascript-6 es6-shim

我在TypeScript中有以下代码:

export class Config
{
    private options = new Map<string, string>();

    constructor() {
    }

    public getOption(name: string): string {
        return this.options[name]; // <-- This line causes the error.
    }
}
Run Code Online (Sandbox Code Playgroud)

编译器给了我这个错误:

Error:(10, 16) TS7017: Index signature of object type implicitly has an 'any' type.

通过es6-shim可以"映射"地图.我不太清楚这里发生了什么.实际上这张地图让我有些困惑.Map应该来自es6-shim,它应该实现es6功能.但是es6没有静态类型,对吧?那么,为什么Map期望键/值类型作为泛型参数?我看到有些人添加'noImplicitAny'标志,但我想解决问题,而不是忽略它.

谢谢.

C S*_*ver 16

从ES6 Map对象检索键是通过该Map.prototype.get方法完成的,而不是使用数组运算符.

因为JavaScript中的所有对象都是动态的并且可以添加属性,所以仍然可以将数组访问运算符与Map对象一起使用,但这是错误的 - 您实际上并没有使用Map功能,而只是添加任意实例的属性.你可以使用{}而不是new Map()在那一点上.TypeScript编译器试图通过警告您尝试使用不存在的索引签名来告诉您.

  • ** TL; DR **:使用`map.get(key)`代替`map [key]`。 (2认同)