属性 'firstName' 在类型 'object' 上不存在
Property 'firstName' does not exist on type 'object'
function marge(obj1: object, obj2: object) {
return Object.assign(obj1, obj2);
}
const margeObj = marge( {firstName: "John"}, {lastName : "Doe"} );
console.log(margeObj.firstName);
Typescipt 在尝试获取 mergeObj 的 属性 firstName 时在最后一行抛出错误。
Property 'firstName' does not exist on type 'object'.
obj1 和 obj2 都是对象,添加 return 类型对象并不能解决这个问题。
TypeScript 不理解合并函数应该是什么类型 return。您可以使用泛型指定参数,然后使用 &
交集运算符将它们合并到 return 类型中:
function marge<T extends {}, S extends {}>(obj1: T, obj2: S): T & S {
return Object.assign(obj1, obj2);
}
const margeObj = marge({firstName: "John"}, {lastName: "Doe"});
console.log(margeObj.firstName);
returned 类型将是 T
和 S
之间的交集,对象参数中的所有属性都将在 return 类型中可用。
X extends {}
只是将参数限制为一个对象。
我认为您必须使用这样的界面。
function marge(obj1: object, obj2: object) {
return Object.assign(obj1, obj2);
}
interface user {
firstName:string;
lastName:string;
}
const margeObj:user = marge( {firstName: "John"}, {lastName : "Doe"} );
console.log(margeObj.firstName);
一种解决方案是使用存在量化,例如:
function marge<T, U>(obj1: T, obj2: U): T & U {
return Object.assign(obj1, obj2);
}
这表示,对于参数 obj1
和 obj2
,存在一些类型,分别是 T
和 U
。该函数不知道这些类型是什么,但它确实知道它应该 return 它们的交集类型。
function marge(obj1: object, obj2: object) {
return Object.assign(obj1, obj2);
}
const margeObj = marge( {firstName: "John"}, {lastName : "Doe"} );
console.log(margeObj.firstName);
Typescipt 在尝试获取 mergeObj 的 属性 firstName 时在最后一行抛出错误。
Property 'firstName' does not exist on type 'object'.
obj1 和 obj2 都是对象,添加 return 类型对象并不能解决这个问题。
TypeScript 不理解合并函数应该是什么类型 return。您可以使用泛型指定参数,然后使用 &
交集运算符将它们合并到 return 类型中:
function marge<T extends {}, S extends {}>(obj1: T, obj2: S): T & S {
return Object.assign(obj1, obj2);
}
const margeObj = marge({firstName: "John"}, {lastName: "Doe"});
console.log(margeObj.firstName);
returned 类型将是 T
和 S
之间的交集,对象参数中的所有属性都将在 return 类型中可用。
X extends {}
只是将参数限制为一个对象。
我认为您必须使用这样的界面。
function marge(obj1: object, obj2: object) {
return Object.assign(obj1, obj2);
}
interface user {
firstName:string;
lastName:string;
}
const margeObj:user = marge( {firstName: "John"}, {lastName : "Doe"} );
console.log(margeObj.firstName);
一种解决方案是使用存在量化,例如:
function marge<T, U>(obj1: T, obj2: U): T & U {
return Object.assign(obj1, obj2);
}
这表示,对于参数 obj1
和 obj2
,存在一些类型,分别是 T
和 U
。该函数不知道这些类型是什么,但它确实知道它应该 return 它们的交集类型。