enum Method {
Add = '+',
Reduce = '-'
}
interface AddParams {
method: Method.Add,
nums: [string, string]
}
interface ReduceParams {
method: Method.Reduce,
nums: [number, number]
}
function calc(params: AddParams): string
function calc(params: ReduceParams): number
function calc(params: AddParams | ReduceParams): string | number {
switch (params.method) {
case Method.Add:
return params.nums[0] + params.nums[1];
case Method.Reduce:
return params.nums[0] - params.nums[1];
}
}
const calc2 = (params: AddParams | ReduceParams): string | number => {
return calc(params);
};
calc2({ method: Method.Add, nums: ['1', '2'] });
calc2({ method: Method.Reduce, nums: [1, 2] });
会提示以下错误,该怎么让它不报错呢
提示是没有匹配的重载吧。
calc2赋值的函数接收一个参数类型为AddParams|ReduceParams,传递给calc确实定义的重载中没有匹配上的。
或者直接把calc的重载定义为
function calc(params: AddParams | ReduceParams): string | number;
这样?