类型索引工作异常,并抛出无法解释的错误

时间:2019-09-11 18:23:52

标签: typescript typescript-types typescript-class

以下代码对我来说似乎很奇怪...

export class Collection {
    private data: {[k: string]: any} = {};
    constructor () {
        // WORKS AS EXPECTED
        this.data["hello"] = "hello";

        // UNEXPECTEDLY WORKS
        this.data[2] = 2;
    }
}
export class Collection2 {
    private data: {[k: symbol]: any} = {};
    constructor () {
        // DOESN'T WORK AS EXPECTED
        this.data["hello"] = "hello";

        // UNEXPECTEDLY DOESN'T WORK
        this.data[Symbol.iterator] = function () {}
    }
}

如果我将索引签名设置为string,则只有字符串应该能够对其进行索引吗?与符号相同。但是,数字能够为[k: string]编制索引,并且我收到一条错误消息,说symbol不能用作索引签名。

1 个答案:

答案 0 :(得分:0)

这对我来说也很奇怪,但这是预期的行为。每the docs

<块引用>

索引签名参数类型必须是“字符串”或“数字”。如果你有一个带有字符串索引签名的类型,keyof T 将是 string |数字(而不仅仅是字符串,因为在 JavaScript 中,您可以使用字符串 (object["42"]) 或数字 (object[42]))访问对象属性