TypeScript中根据条件定义类型函数的输出方法
P粉764836448
P粉764836448 2023-08-14 18:18:08
[JavaScript讨论组]

我正在尝试为我的函数定义输出类型,我想根据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 = <T extends Options>(
  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
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号