以下代码对我来说似乎很奇怪...
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
不能用作索引签名。
答案 0 :(得分:0)
这对我来说也很奇怪,但这是预期的行为。每the docs:
<块引用>索引签名参数类型必须是“字符串”或“数字”。如果你有一个带有字符串索引签名的类型,keyof T 将是 string |数字(而不仅仅是字符串,因为在 JavaScript 中,您可以使用字符串 (object["42"]) 或数字 (object[42]))访问对象属性