TypeScript中根据条件定义类型函数的输出方法
P粉764836448
P粉764836448 2023-08-14 18:18:08
0
1
450

我正在尝试为我的函数定义输出类型,我想根据toNumberIfNeeded标志在stringnumber类型之间设置条件,假设如果toNumberIfNeeded为真,则此函数将返回一个数字类型,反之返回字符串类型。我该如何做?

interface Options { uppercase?: boolean; filterSpecialChars?: boolean; toNumberIfNeeded?: boolean; } export const textTransformer = (text: string, options?: Options) => { const { uppercase, filterSpecialChars, toNumberIfNeeded} = options || {}; // 我的处理逻辑代码 return toNumberIfNeeded ? parseInt(text) : text; }

预期的示例:

textTransformer('hello'); // 返回字符串类型 textTransformer('123', { toNumberIfNeeded: true }); // 返回数字类型
P粉764836448
P粉764836448

全部回复 (1)
P粉878542459

你可以重构textTransformer()方法,接受一个泛型参数,并使用条件类型来检查toNumberIfNeeded是否为truefalse。我认为 TypeScript 无法自动缩小返回值的类型。你必须使用类型断言,否则返回类型将被推断为string | number

interface Options { uppercase: boolean; filterSpecialChars: boolean; toNumberIfNeeded: boolean; } export const textTransformer = ( text: string, options?: T ): T["toNumberIfNeeded"] extends true ? number : string => { const {uppercase, filterSpecialChars, toNumberIfNeeded} = options || {}; // 我的处理逻辑代码 return (toNumberIfNeeded ? parseInt(text) : text) as ReturnType< typeof textTransformer >; }; textTransformer("hello"); // 推断为 string textTransformer("123", { toNumberIfNeeded: true, uppercase: false, filterSpecialChars: false }); // 推断为 number
    最新下载
    更多>
    网站特效
    网站源码
    网站素材
    前端模板
    关于我们 免责声明 Sitemap
    PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!