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 在最后一行拋出錯誤。
“物件”型別上不存在屬性“名字”。
obj1 和 obj2 都是物件,添加回傳型別物件并不能解決這個問題。
uj5u.com熱心網友回復:
TypeScript 不理解合并函式應該回傳什么型別。您可以使用泛型指定引數,然后使用&交集運算子將它們合并到回傳型別中:
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);
回傳的型別將是 和 之間的交集T,S物件引數中的所有屬性都將在回傳型別中可用。
X extends {}只是將引數約束到一個物件。
uj5u.com熱心網友回復:
我認為您必須使用這樣的界面。
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);
uj5u.com熱心網友回復:
一種解決方案是使用存在量化,例如:
function marge<T, U>(obj1: T, obj2: U): T & U {
return Object.assign(obj1, obj2);
}
這表示,對于 paramsobj1和obj2存在一些型別,T和U,分別。該函式不知道這些型別是什么,但它知道應該從它們回傳一個交集型別。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/464591.html
標籤:javascript 打字稿 目的 特性 分配
