ts 类型如何重新声明

情况:


// 假设 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

阅读 6.4k
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都是可选的

楼上的没毛病

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Microsoft
子站问答
访问
宣传栏