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/