有关打字稿的基本问题。
我有一个用&运算符连接两种类型的列表。下面显示了初始化:
let objects: (Object & number)[] = [];
如何将值添加到列表中?我尝试使用push函数,但是我不知道如何正确传递参数。例如,我尝试过:
objects.push( {...object, 2} )
我应该如何传递参数?
我的对象看起来像:
object: Object = { first: string, last: string }
经过处理后,它应该看起来像:
object: Object = { first: string, last: string, value: number }
我想将该号码添加为其他成员
答案 0 :(得分:0)
交叉点类型是错误的方法。 Object & number
是同时属于number
和object
的类型。根据您要实现的目标的描述,您需要一个对象,该对象具有原始类型和额外的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);