此行没有错误
if (!t[1]) {
t[1] = [];
}
t[1].push(key);
t是Test类型,它不能直接索引。但是,它有一个成员,数据,可以索引。那么为什么这些行没有错误。
ITestData
模拟嵌套对象,分别使用整数和字符串键。
{
1 : {
"hello" : {}
}
2 : { ..
}
export interface ITestData {
[idx:number] : {[prop:string]:any}
}
export interface ITest {
data:ITestData
}
export class Test implements ITest {
data:ITestData = {};
}
class Greeter {
data:ITestData = {};
private del(t:Test, key:string) {
if (!t[1]) {
t[1] = [];
}
t[1].push(key);
}
}
答案 0 :(得分:1)
JavaScript中的所有内容都可以通过字符串(以及使用number.toString()的数字)编制索引。 TypeScript将允许按字符串(和数字)进行索引。
您遇到的更简单的版本:
var foo = {data:123};
var bar = foo[0]; // Valid : bar is of type any
您可以阻止可以将分配给索引成员,例如索引时,在以下情况下只能分配Foo
:
var bas: {[index:string]:Foo};
但是你不能一起禁用索引(即你可以限制读/写的类型,但不能限制你可以读/写的事实)。