gpt4 book ai didi

基于输入的 TypeScript 返回类型

转载 作者:搜寻专家 更新时间:2023-10-30 21:17:19 24 4
gpt4 key购买 nike

我有以下功能:

subtract(sub: number | CalendarWeek): T {
if (typeof sub === 'number') {
return new CalendarWeek(...); // Returns a CalendarWeek if sub is a number
}

return 1; // Return number if sub is CalendarWeek
}

问题是我需要定义类型 T,使其依赖于提供的 sub 类型。也就是说,如果 subCalendarWeek,则 T 是 number,如果 sub 是,则 T 是 CalendarWeek 编号

最佳答案

处理此问题的传统 TypeScript 方法是使用 overloaded functions .在你的情况下,它会是这样的:

subtract(sub: number): CalendarWeek;
subtract(sub: CalendarWeek): number;
subtract(sub: number | CalendarWeek): number | CalendarWeek {
if (typeof sub === 'number') {
return new CalendarWeek(...); // Returns a CalendarWeek if sub is a number
}
return 1; // Return number if sub is CalendarWeek
}

你可以想象使用 conditional types而不是在 TypeScript 2.8 及更高版本中用重载来表示它,但它可能比你试图到达这里的更高级。

对于感兴趣的各方,该解决方案将如下所示:

subtract<T extends number | CalendarWeek>(sub: T): T extends number ? CalendarWeek : number;
subtract(sub: number | CalendarWeek): number | CalendarWeek {
if (typeof sub === 'number') {
return new CalendarWeek(); // Returns a CalendarWeek if sub is a number
}
return 1; // Return number if sub is CalendarWeek
}

希望对您有所帮助。祝你好运!

关于基于输入的 TypeScript 返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50951880/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com