簡體   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