gpt4 book ai didi

typescript - 位置树对象类型声明

转载 作者:行者123 更新时间:2023-12-05 02:32:27 31 4
gpt4 key购买 nike

我有一个代表位置树的对象。每个位置可能有(或没有)子位置并有一个数字 id

{
id: 0,
USA: {
id: 1,
ARIZONA: {
id: 2,
PHOENIX: {
id: 3
},
TUSCANY: {
id: 4
}
},
ALABAMA: {
id: 4,

}
},
CANADA: {
id: 6,
ONTARIO: {
id: 7,
TORONTO: {
id: 8
},
OTTAWA: {
id: 9
}
},
QUEBEC: {
id: 10,
MONTREAL: {
id: 11
}
},
}
UK: {
id: 12,
LONDON: {
id: 13
}
}
}

我试图将其表示为一个接口(interface)

interface Location  {
id: number;
[key in string]?: Location

}

但它不允许我说:

A mapped type may not declare properties or methods.ts(7061)I also tried

interface Location  {
id: number;
[key:string]: Location

}

但是它说

Property id of type number is not assignable to string index type Location

最佳答案

您可以为此使用type 而不是interface。我们将使用它,因为这样我们就可以使用交集和并集。我们将像下面这样使用它:

type Foo = { id: number } | { id: number } & { [key: string]: Foo };

Foo 可以简单地是一个带有 id 的对象,也可以是一个带有 id 的对象,加上带有更多 Foo 对象的字符串索引签名。

如果你想访问 Foo | 的结果undefined,您可以使用 noUncheckedIndexAccess 编译器选项(虽然相当严格),或者只需将索引签名中的 Foo 替换为 Foo |未定义

Playground

关于typescript - 位置树对象类型声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71246876/

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