自我引用索引类型

时间:2015-10-26 22:11:09

标签: typescript typescript1.6

我想定义一个具有一些已知成员的接口,并且未知成员应该映射回相同的类型。我希望能够定义:

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。

1 个答案:

答案 0 :(得分:3)

Foo

声明是自相矛盾的:它表示此类型的每个声明属性都是name,但stringstring

要修复,请指明所有声明的属性 Foointerface Foo { name?: string; [others: string]: Foo|string; }

awk