Typescript TS接口静态名称和[键:字符串]

Typescript TS接口静态名称和[键:字符串],typescript,Typescript,或 我的IDE将抛出此错误消息 “number”类型的属性“sub”不可分配给字符串索引类型“{arr:number[];}”。ts(2411) 如何将静态属性名称和动态属性一起使用 已添加 我已经使用了|,但仍然存在来自另一个代码的错误 data = { sub: 1, RANDOM1: [3], DYNAMIC1: [9,0,0] } { data[key].map((num:number,index:number)=>…)//key不能是'sub'。key始终是'Array

我的IDE将抛出此错误消息

“number”类型的属性“sub”不可分配给字符串索引类型“{arr:number[];}”。ts(2411)

如何将静态属性名称和动态属性一起使用

已添加

我已经使用了
|
,但仍然存在来自另一个代码的错误

data = { 
  sub: 1,
  RANDOM1: [3],
  DYNAMIC1: [9,0,0]
}
{
data[key].map((num:number,index:number)=>…)//key不能是'sub'。key始终是'Array'类型`
}
上面的代码抛出此错误消息

类型“number | number[]”上不存在属性“map”。类型“number”上不存在属性“map”。ts(2339)


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

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

我试图添加
|
,但无法使用它。我将补充我的问题。@zynkn这是另一个错误。您不能在
号码上调用
.map()
。您必须键入检查您的
数据[键]
例如,使用
hasOwnProperty(“map”)
是的,我知道我不能在键入
号码时调用
map()。我想我需要编辑一下我的代码。
data = { 
  sub: 1,
  RANDOM1: [3],
  DYNAMIC1: [9,0,0]
}
{
  data[key].map((num:number, index:number)=> ...) // key can not be `sub`. key always be the type `Array<number>`
}
interface P {
  data: {
    [key: string]: number | Array<number>;
  };
}
interface P{
  data: {
    sub: number
    [key: string]: Array<number> | number
  }
}