我想定义一个具有一些已知成员的接口,未知成员应该映射回相同的类型。我希望能够定义:
interface Foo {
name?: string;
[others: string]: Foo;
}
这将允许我定义:
var myFoo: Foo = {
name: 'foo1'
anotherfoo: {
name: 'foo2'
yetanotherfoo: {
name: 'foo3'
}
}
}
但是,我的界面无法编译并显示以下错误消息:
“字符串”类型的属性“名称”不可分配给字符串索引类型“Foo”
到目前为止,我设法做到这一点的唯一方法是使用任何类型定义我的索引类型:
[others: string]: any;
这允许代码编译,但显然会失去任何类型的安全性和更深层次的元素的智能感知。
我不想要更改我的数据结构的建议 - 这实际上是为了更正敲除映射库的打字稿定义,由于不允许未定义的成员,它不再适用于 TS1.6。