與 Typescript 概念作斗爭。在我的應用程式中,用戶可以為可供出售的產品創建出價或價格,但是在進行輸入時,我會在使引數可選之間來回切換,這樣我就可以傳入要保存的部分創建的模型并像 id 一樣填寫資料, created_date 等,并且只對回傳型別使用相同的模型。
為最終相同的模型制作多個介面感覺是多余的,但根據我的閱讀,我只是在想這個錯誤,應該分別查看表單資料和創建模型。只是想知道這是否是一直使用 Typescript 的人們公認的做法?
interface Price {
id?:number;
amount: number;
product: Product | number;
created_on?: string;
}
對比
interface PriceFormData {
amount: number;
product: number;
}
interface Price {
id: number;
amount: number;
product: Product;
created_on: string;
}
uj5u.com熱心網友回復:
沒有一個萬能的答案。這取決于你如何使用你的型別,如果沒有這樣的例子,只能給出假設/學術建議。
在像您提供的那種情況下,通常最好定義代表每種可能性的多個特定型別,然后將它們聯合起來,這樣當您不確定會得到哪種型別時,您可以區分它們。當您確定會遇到哪種型別時,這也為您提供了更強大的型別,因此在訪問屬性等時不必執行那么多檢查。
型別的組合也很強大。考慮以下示例:
TS游樂場
type Product = unknown;
type Amount = { amount: number };
type PriceFormData = Amount & { product: number };
type Price = Amount & {
created_on: string;
id: number;
product: Product;
};
type PriceOrFormData = Price | PriceFormData;
function findProduct (productId: number): Product {
// ...lookup in DB
return /* product from DB */;
}
function getProductFromPriceInfo (priceInfo: PriceOrFormData): Product {
if ('id' in priceInfo) {
priceInfo; // priceInfo is type Price
return priceInfo.product;
}
else {
priceInfo; // priceInfo is type PriceFormData
return findProduct(priceInfo.product);
}
}
這是使用泛型的另一個組合示例。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/444508.html
下一篇:根據字串屬性從聯合中獲取型別
