打字稿推送到具有关联类型的列表

时间:2019-05-23 10:06:02

标签: typescript

有关打字稿的基本问题。

我有一个用&运算符连接两种类型的列表。下面显示了初始化:

let objects: (Object & number)[] = [];

如何将值添加到列表中?我尝试使用push函数,但是我不知道如何正确传递参数。例如,我尝试过:

objects.push( {...object, 2} )

我应该如何传递参数?

我的对象看起来像:

object: Object = { first: string, last: string } 

经过处理后,它应该看起来像:

object: Object = { first: string, last: string, value: number } 

我想将该号码添加为其他成员

2 个答案:

答案 0 :(得分:0)

交叉点类型是错误的方法。 Object & number是同时属于numberobject的类型。根据您要实现的目标的描述,您需要一个对象,该对象具有原始类型和额外的value属性:

let objects: ({ foo: number } & { value: number })[] = [];

let myObj = { foo: 1 }
objects.push({ ...myObj, value: 2 });

您也可以使用object代替特定类型:

let objects: (object & { value: number })[] = [];

let myObj: object = { foo: 1 }
objects.push({ ...myObj, value: 2 });

但这并没有真正增加太多,因为object并没有添加任何属性,因此也可以做同样的事情:

let objects: ({ value: number })[] = [];

let myObj = { foo: 1 };
objects.push({ ...myObj, value: 2 });

答案 1 :(得分:0)

可以将对象定义为“ any”类型,并动态添加属性,但这违背了使用typescript的全部目的:使用强类型语言。

我的建议是只向定义中的Object类添加一个属性。

否则,您可以尝试定义同时包含对象和数字值的ParentObject类:

创建一个包含两个值的新对象

export interface ParentObject {
  object: Object;
  number: number;
}

然后链接对象和您的数字值

let parentObject: ParentObject = {
  object: object,
  number, number
};

最后将扩展的parentObject推送到您的对象列表中

const objects: Object[] = [];
objects.push(parentObject);