Open jianjiachenghub opened 4 years ago
@jianjiachenghub
对啊,后面提到:
注意,TypeScript 会优先从最前面的函数定义开始匹配,所以多个函数定义如果有包含关系,需要优先把精确的定义写在前面。 我把最后的定义放到最前面也还是一样报错
这样应该可以:
正在学习ts,如果不对,欢迎纠正
function reverse(x: number): number;
function reverse(x: string): string;
function reverse(x: number | string): number | string | void {
if (typeof x === 'number') {
return Number(x.toString().split('').reverse().join(''));
} else if (typeof x === 'string') {
return x.split('').reverse().join('');
}
}
这样应该可以:
正在学习ts,如果不对,欢迎纠正
function reverse(x: number): number; function reverse(x: string): string; function reverse(x: number | string): number | string | void { if (typeof x === 'number') { return Number(x.toString().split('').reverse().join('')); } else if (typeof x === 'string') { return x.split('').reverse().join(''); } }
这样改写是可以。 但问题是:作者 @xcatliu 写这篇文章的时候应该是不报错的。那么现在报错的原因是由于ts版本变化或者说是编译器编译规则改动导致的吗?
这样应该可以:
正在学习ts,如果不对,欢迎纠正
function reverse(x: number): number; function reverse(x: string): string; function reverse(x: number | string): number | string | void { if (typeof x === 'number') { return Number(x.toString().split('').reverse().join('')); } else if (typeof x === 'string') { return x.split('').reverse().join(''); } }
这样改写是可以。 但问题是:作者 @xcatliu 写这篇文章的时候应该是不报错的。那么现在报错的原因是由于ts版本变化或者说是编译器编译规则改动导致的吗?
应该不是版本和编译器的问题,至少我尝试了2.4.1之后的版本,都会提示错误。个人觉得是一开始就忽略了这个可能性,即函数的流程可能不会走到任何一个条件语句中去,所以这个函数是可能没有返回的,但显式设定的返回类型肯定是不能覆盖到这个可能性的。
函数的类型/重载.ts(4,39): error TS2366: Function lacks ending return statement and return type does not include 'undefined'.