首页 > 解决方案 > 使用命名对象定义数组的打字稿

问题描述

我正在努力为具有命名对象的数组定义一个类型

下面是示例代码。

现在我必须定义sin的类型typescript

 let s =[12,3,4]
 s['data']={'x':0}
 console.log(s) // [12,3,4,data:{'x':0}]

现在如何 type定义s

谁能指导

标签: javascriptarraysreactjstypescripttypes

解决方案


最好不要这样做。但是您可以通过使用相交类型来做到这一点,在这种情况下:

type AugmentedNumberArray = number[] & {
    data?: {x: number};
};

这是一种既是数字数组又是具有可选data属性的对象的类型,该对象可以是具有x具有数字值的属性的对象。

游乐场链接

但是一旦你做了类似的事情s2 = s.map(v => v * 2),你就会失去这个data属性,因为map(像所有数组方法一样)只处理对象的类数组部分,而不是它可能具有的任何其他属性。

不过,我建议定义一个同时具有命名属性(data或其他)和数字数组的对象:

interface MyType {
    data?: {x: number};
    values: number[];
}

然后像这样使用它:

let s: MyType = {values: [12,3,4]};
s['data'] = {'x':0}; // Or idiomatically: s.data = ...
console.log(s);

游乐场链接


推荐阅读