打字稿功能重载:打字稿不分析功能代码

时间:2020-06-01 20:33:07

标签: typescript overloading

考虑以下函数重载和错误的实现。

function foo(param: number): boolean;
function foo(param: string): string;

function foo(param) {
  if (typeof param === "number") {
    // typescript does not complain that 12 is not boolean
    return 12;
  } else if (typeof param === "string") {
    // typescript does not complain that {} is not string
    return {};
  }
}

这是人们的解释方式:

  1. 如果函数foo使用数字参数,则应返回布尔值

  2. 如果函数foo使用字符串参数,则应返回字符串

  3. 应禁止其他呼叫

确保类型检查器可以通过分析功能代码来验证1&2。 但是打字稿并不能做到这一点-它只能做到3。

是否可以在打字稿中实现上述行为?

1 个答案:

答案 0 :(得分:0)

删除function foo(param)。这会添加第三个重载,其中param的类型为any

function foo(param: number): boolean;
function foo(param: string): string {
  if (typeof param === "number") {
    return 12;
  } else if (typeof param === "string") {
    return {};
  }
}

Code in TypeScript Playground