我想定义一个具有一些已知成员的接口,并且未知成员应该映射回相同的类型。我希望能够定义:
interface Foo {
name?: string;
[others: string]: Foo;
}
这将允许我定义:
var myFoo: Foo = {
name: 'foo1'
anotherfoo: {
name: 'foo2'
yetanotherfoo: {
name: 'foo3'
}
}
}
但是,我的界面无法编译,并显示以下错误消息:
'string'类型的属性'name'不能分配给字符串索引类型'Foo'
到目前为止,我设法做到这一点的唯一方法是使用类型any定义我的索引类型:
[others: string]: any;
这允许代码编译,但显然会丢失任何类型的安全性和intellisense进一步向下的元素。
我不想要一个改变我的数据结构的建议 - 这实际上是为了更正淘汰映射库的一个打字稿定义,由于不允许未定义的成员,它不再适用于TS1.6。
答案 0 :(得分:3)
Foo
声明是自相矛盾的:它表示此类型的每个声明属性都是name
,但string
是string
。
要修复,请指明所有声明的属性 Foo
或interface Foo {
name?: string;
[others: string]: Foo|string;
}
:
awk