问个 ts 函数重载的问题?

  private handleParams(method: Method.Add, params: AddParams)
  private handleParams(method: Method.Reduce, params: ReduceParams)
  private handleParams(method: Method, params: AddParams | ReduceParams) {
    switch (method) {
      case Method.Add:
        // 到了这里
        // params 还是 AddParams | ReduceParams 这个类型
        // 预期是 AddParams 类型,应该怎么写呢
        break;
        // ...
    }
阅读 1.5k
1 个回答
✓ 已被采纳
  1. 我不确定问题描述无效的产生原因;
  2. 可以参考如下写法,看是否可以满足你的需求;
enum Method {
  Add = 'Add',
  Reduce = 'Reduce',
}

interface AddParams {
  method: Method.Add;
  name: string;
}

interface ReduceParams {
  method: Method.Reduce;
  length: number;
}

class Aaa {
  private handleParams(params: AddParams): string;
  private handleParams(params: ReduceParams): number;
  private handleParams(params: AddParams | ReduceParams): number | string {
    const method = params.method;

    switch (method) {
      case Method.Add:
        return params.name;
      case Method.Reduce:
        return params.length;
      default:
        return 0;
    }
  }
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题