V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
xiaoming1992
V2EX  ›  TypeScript

函数根据入参不同,有不同的返回类型,应该怎么写函数重载?

  •  
  •   xiaoming1992 · 2020-04-08 00:18:49 +08:00 · 1360 次点击
    这是一个创建于 1725 天前的主题,其中的信息可能已经有所发展或是发生改变。

    这样写是可以的, ts 不报错:

    interface GetNumber {
      name: "GetNumber";
    }
    
    interface GetString {
      name: "GetString";
    }
    
    function get(options: GetNumber): number
    function get(options: GetString): string
    function get(options: GetNumber | GetString) {
      switch (options.name) {
        case "GetNumber":
          return 1 + 1
        case "GetString":
          return `${1 + 1}`
        default:
          throw new Error("param error")
      }
    }
    
    

    下面这样不行, ts 报错: Type 'string | number' is not assignable to type 'number'.

    // 可是我的 FuncGet 类型 是从另一个文件里引入的
    // 做不到像上面那么写
    // 那么我该怎么写呢?
    interface FuncGet {
      (options: GetNumber): number;
      (options: GetString): string;
    }
    
    // ts 编译错误: Type 'string | number' is not assignable to type 'number
    const get: FuncGet = (options: GetNumber | GetString) => {
      switch (options.name) {
        case "GetNumber":
          return 1 + 1
        case "GetString":
          return `${1 + 1}`
        default:
          throw new Error("param error")
      }
    }
    
    
    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1090 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 19:04 · PVG 03:04 · LAX 11:04 · JFK 14:04
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.