ts 类型如何重新声明

Grewer
  • 833

情况:


// 假设 a 是接受后端的数据,他有一个类型 IType
interface IType { arr: { label: string; value: number }[]; key: number }

const a:IType  = {
  key: 11,
  arr: [{ label: '1', value: 2 }]
};


// 但是当我在组件中使用时
// a.arr 需要进行转换  将键名 label 改成 name ,但是报错
a.arr = a.arr.map(v => ({ name: v.label, value: v.value }))
// Type '{ name: string; value: number; }[]' is not assignable to type '{ label: string; value: number; }[]'.

所以

  1. 如何修改 a 的声明 能使得 arr 的修改能成功
  2. 不用 另外一个元素代替 如再声明一个类型是正确的b , 把 a 的其余值复制给 b

ps:
不使用 any

回复
阅读 2.2k
3 个回答
interface IType { 
    arr: { label: string; value: number }[]; 
    key: number 
 }

// 修改为下面的

interface IType { 
    arr: { label: string; value: number;[propName: string]: any; }[]; 
    key: number;
}
interface IType { arr: { label?: string; value: number, name?: string }[]; key: number }

const a:IType  = {
  key: 11,
  arr: [{ label: '1', value: 2 }]
};

a.arr = a.arr.map(v => ({ name: v.label, value: v.value }))

我只能想到label和name都是可选的

楼上的没毛病

宣传栏