开启--noImplicitAny后,TS编译器为何未标记返回Any的函数?
问题解答
首先要纠正一个误解:你写的test函数返回类型并不是any,TypeScript会自动把它推断为string | number——编译器会分析函数所有分支的返回值类型,将这些类型的联合类型作为函数的返回类型。
至于开启--noImplicitAny后没触发编译错误的原因,是因为这个选项的管控范围是变量、参数的隐式any类型,并不涉及函数返回值。--noImplicitAny只会在TypeScript无法推断变量或参数的具体类型时抛出错误,但对于函数返回值,只要编译器能推断出明确的类型(哪怕是联合类型),就不会触发该选项的报错。
如果想要强制函数必须显式指定返回类型,可以开启TypeScript的--strict模式,或者单独配置相关规则;另外--noImplicitReturns选项是用来检查函数是否存在无返回值的分支,和强制显式返回类型不是一回事。
顺带提一句,你的代码里有个小语法错误:console.log(typeof(test("b"));少了一个右括号,修正后应该是console.log(typeof(test("b")));。
内容的提问来源于stack exchange,提问作者caramel1995
相关产品推荐
相关产品推荐

