javascript - 使用命名对象定义数组的打字稿
问题描述
我正在努力为具有命名对象的数组定义一个类型
下面是示例代码。
现在我必须定义s
in的类型typescript
let s =[12,3,4]
s['data']={'x':0}
console.log(s) // [12,3,4,data:{'x':0}]
现在如何 type
定义s
谁能指导
解决方案
最好不要这样做。但是您可以通过使用相交类型来做到这一点,在这种情况下:
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);
推荐阅读
- c++ - for循环中的多线程c ++
- python - 我在哪里可以找到 k-means 的距离度量?
- javascript - 与 for 和回调挑战异步:
- python - 访问函数外部变量我使用另一种方式但不工作
- android-intent - startService() 中的 Intent 应用程序或活动应使用哪个上下文?
- python - Python Tesseract 西里尔字符问题
- python - ValueError:密文长度必须等于密钥大小
- django - Django模型:在一个查询中获取最后一个ForeignKey
- javascript - ECharts:改变线条颜色。我选了 2 种颜色。两种颜色都显示奇偶风格
- r - 在闪亮的仪表板中嵌入图片