gpt4 book ai didi

typescript - TS接口(interface)静态名称和[key : string]

转载 作者:行者123 更新时间:2023-12-04 04:23:41 24 4
gpt4 key购买 nike

interface P{
data: {
sub: number
[key: string]: {
arr: Array<number>
}
}
}

我的数据可能是

data = { 
sub: 1,
DYNAMIC1: [1,2,3],
DYNAMIC2: [3,4,5]
}

data = { 
sub: 1,
RANDOM1: [3],
DYNAMIC1: [9,0,0]
}

我的 IDE 抛出了这个错误信息

Property 'sub' of type 'number' is not assignable to string index type '{ arr: number[]; }'.ts(2411)

如何同时使用静态属性名称和动态属性

已添加

我已经使用了|,但是另一个代码仍然出错。

{
data[key].map((num:number, index:number)=> ...) // key can not be `sub`. key always be the type `Array<number>`
}

上面的代码抛出了这个错误信息

Property 'map' does not exist on type 'number | number[]'. Property 'map' does not exist on type 'number'.ts(2339)

最佳答案

您正在定义一个索引签名,它强制所有属性的返回类型与索引签名返回类型相匹配。但是,您可以使用联合运算符修复它,例如

interface P {
data: {
[key: string]: number | Array<number>;
};
}

如果您想将 sub 保留为已定义的属性,则必须使用 number 的具体类型扩展索引,例如

interface P{
data: {
sub: number
[key: string]: Array<number> | number
}
}

关于typescript - TS接口(interface)静态名称和[key : string],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58436437/

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