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

2020-04-08 00:18:49 +08:00
 xiaoming1992

这样写是可以的, 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")
  }
}

1263 次点击
所在节点    TypeScript
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/660276

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX