【问题标题】:Self-Referencing Indexed Type自引用索引类型
【发布时间】:2016-01-26 04:32:16
【问题描述】:

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

interface Foo {
    name?: string;
    [others: string]: Foo;
}

这将允许我定义:

var myFoo: Foo = {
    name: 'foo1'
    anotherfoo: {
        name: 'foo2'
        yetanotherfoo: {
            name: 'foo3'
        }
    }
}

但是,我的界面无法编译并显示以下错误消息:

“字符串”类型的属性“名称”不能分配给字符串索引类型“Foo”

到目前为止,我设法做到这一点的唯一方法是使用任何类型定义我的索引类型:

[others: string]: any;

这允许代码编译,但显然会失去任何类型安全性和对更底层元素的智能感知。

我不想要更改我的数据结构的建议 - 这实际上是为了更正敲除映射库的打字稿定义,由于不允许未定义的成员,它不再适用于 TS1.6。

【问题讨论】:

    标签: typescript typescript1.6


    【解决方案1】:
    interface Foo {
        name?: string;
        [others: string]: Foo;
    }
    

    声明是自相矛盾的:它说这个类型的每个声明的属性都是Foo,但namestring

    要修复,请指出所有声明的属性要么stringFoo

    interface Foo {
        name?: string;
        [others: string]: Foo|string;
    }
    

    【讨论】:

    • 谢谢 - 这不是最简洁的解决方案(我正在处理的实际课程有 5 或 6 种类型,包括委托),但它比使用任何一种都好!
    猜你喜欢
    • 1970-01-01
    • 2018-08-28
    • 2011-03-04
    • 2023-03-21
    • 2021-12-30
    • 2020-06-14
    • 2018-02-13
    • 2022-11-11
    • 2023-01-31
    相关资源
    最近更新 更多