gpt4 book ai didi

typescript - 自引用索引类型

转载 作者:搜寻专家 更新时间:2023-10-30 21:31:13 24 4
gpt4 key购买 nike

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

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

这将允许我定义:

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

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

Property 'name' of type 'string' is not assignable to string index type 'Foo'

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

[others: string]: any;

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

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

最佳答案

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

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

要修复,指出所有声明的属性是或者 stringFoo:

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

关于typescript - 自引用索引类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33356535/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com