我在一個當前作業如下的類中有一個物件合并:
public merge(): TOne & TTwo {
return { ...this.objectOne, ...this.objectTwo };
}
我試圖將它們分開,因為某些屬性可能具有相同的名稱......我的第一個想法是創建 2 個變數,其名稱將由類屬性定義:
public merge(): { [this.objectOne.key]: TOne, [this.objectTwo.key]: TTwo } {
return { [this.objectOne.key]: { ...this.objectOne }, [this.objectTwo.key]: { ...this.objectTwo } };
}
但這不適用于泛型型別并顯示此錯誤:
型別文字中的計算屬性名稱必須參考其型別為文字型別或“唯一符號”的運算式
如何將它們與自定義屬性名稱合并?或者任何解決方法?或者有什么建議?
PS.:我剛剛問了這個問題,然后我意識到這對解決實際問題沒有幫助。
uj5u.com熱心網友回復:
您可以使用[key: number]: A | B. 物件的任何鍵都應該是數字,或者您可以指定任何型別,并且該鍵的值是 A 或 B。
我找不到任何方法來制作像您嘗試做的動態鍵。
例如 :
type A = {
key: number;
name: string;
age: number;
};
type B = {
key: number;
adress: string;
phone: number;
};
const obj1: A = { key: 1, name: "John", age: 30 };
const obj2: B = { key: 2, adress: "London", phone: 12345 };
const merge = (obj1: A, obj2: B): { [key: string]: A | B } => {
return { [obj1.key]: obj1, [obj2.key]: obj2 };
};
merge(obj1,obj2);
// {1: {key: 1, name: "John", age: 30}, 2: {key: 2, adress: "London", phone: 12345}}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/451841.html
標籤:javascript 打字稿 打字稿泛型
