這是我的示例,我不知道如何實作“MakeCoffee”功能。請幫忙。謝謝。
interface Latte {
ouncesEspresso: number;
milkToEspresso: 4;
};
interface Cappuccino = {
ouncesEspresso: number;
milkToEspresso: 2;
};
interface IceLatte extends Latte {
icePortion: "light" | "normal" | "extra";
}
type Coffee = Latte | Cappuccino;
function MakeCoffee<T extends Coffee>(): T {
// I don't know how to figure out which type is used in that union type
// is this possible? if not, how to change the design
}
uj5u.com熱心網友回復:
根據我的經驗,使用未系結到任何函式引數的泛型引數是一種不好的做法。有些情況下您需要這樣做,但這與您的情況無關。
如果您只是為了制作構建器功能,請嘗試以下操作:
interface Latte {
ouncesEspresso: number;
milkToEspresso: 4;
};
interface Cappuccino {
ouncesEspresso: number;
milkToEspresso: 2;
};
const coffeeKind = <
MilkCount extends 4 | 2
>(coffee: Coffee, milkCount: MilkCount):
coffee is Extract<Coffee, { milkToEspresso: MilkCount }> =>
coffee.milkToEspresso === milkCount
interface IceLatte extends Latte {
icePortion: "light" | "normal" | "extra";
}
type Coffee = Latte | Cappuccino;
function makeCoffee(milkToEspresso: 4, ouncesEspresso: number): Latte
function makeCoffee(milkToEspresso: 2, ouncesEspresso: number): Cappuccino
function makeCoffee(milkToEspresso: Coffee['milkToEspresso'], ouncesEspresso: number) {
return {
milkToEspresso,
ouncesEspresso,
}
}
const cappuccino = makeCoffee(2, 4) // Cappuccino
const latte = makeCoffee(4, 4) // Latte
在此處輸入鏈接描述
見函式多載
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/494542.html