【问题标题】:Typescript function return type depending on number or type of argumentsTypescript 函数返回类型取决于参数的数量或类型
【发布时间】:2021-05-13 23:36:51
【问题描述】:

假设我有一个函数应该根据参数的数量和类型返回不同的类型。我将如何在 TypeScript 中描述这一点?

function foo(t: number): string
function foo(t: number, s: string): boolean {
   return typeof s === 'string' ? true : 'false';
}

简单来说:函数foo 在使用number 参数调用时返回string,在使用number 和string 参数调用时返回boolean。

【问题讨论】:

    标签: typescript


    【解决方案1】:

    TypeScript 没有这种粒度级别。你可以说:

    function foo(t: number, s?: string): string | boolean
    

    …它接受一个 optional 第二个参数并返回一个字符串或一个布尔值,但如果你想让返回值类型以参数为条件,那么你需要定义两个单独的功能。

    【讨论】:

      【解决方案2】:

      您可以定义函数的重载+更改实现,例如:

      Playground

      function foo(t: number, s: string): boolean;
      
      function foo(t: number): string;
      
      function foo(t: number, s?: string): string | boolean {
         return s !== void 0 ? true : 'false';
      }
      
      const var1 = foo(50);
      const var2 = foo(50, 'str');
      

      通过这种方式,TypeScript 将能够根据函数参数的数量来定义变量的正确类型。



      【讨论】:

        【解决方案3】:

        有趣的问题!就我的经验而言,TypeScript 不支持这一点。 您可以做的是将返回类型设置为 this | that 类型。 这意味着“返回类型是this 或that”

        function foo(t: number, s: string): string | boolean {}
        

        在我的工作团队中,我们通常会尽量避免使用this | that 方法,因为它可能会增加错误来源。

        我的建议是两个具有特定返回类型的函数,如果这在您的应用程序中可行的话。

        function getFoo(t: number): string {}
        
        function isFoo(t: number, s: string): boolean {}
        

        【讨论】:

          猜你喜欢
          • 2021-07-18
          • 1970-01-01
          • 1970-01-01
          • 2022-01-11
          • 1970-01-01
          • 1970-01-01
          • 2022-01-09
          • 2020-04-27
          • 2021-10-20
          相关资源
          最近更新 更多