繁体   English   中英

类型“object”上不存在属性“firstName”

[英]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);

尝试获取 mergeObj 的属性 firstName 时,Typescipt 在最后一行抛出错误。

类型“object”上不存在属性“firstName”。

obj1 和 obj2 都是 object 并且添加返回类型 object 没有解决这个问题。

TypeScript 不明白合并 function 应该返回什么类型。 您可以将 arguments 指定为 generics,然后使用&交集运算符将它们合并到返回类型中:

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);

返回类型将是TS之间的交集, object arguments 中的所有属性都将在返回类型中可用。

X extends {}只是将参数限制为 object。

我认为您必须使用这样的界面。

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);
}

这表示,对于参数obj1obj2 ,分别存在一些类型TU function 不知道这些类型是什么,但它知道它应该从它们返回一个交集类型。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM