为何TypeScript未限制返回void类型的函数返回字符串?
为什么TypeScript允许返回字符串的函数赋值给void返回类型的函数?
你的代码出现这种情况,核心原因是TypeScript对void返回类型的函数有特殊的类型兼容规则:
- 当一个函数类型被标注为返回
void时,TypeScript只要求参数列表匹配,不管函数实际返回什么类型,都可以赋值给这个void类型的函数。 - 这是因为在TypeScript的设计逻辑里,标注为返回
void的函数,其返回值会被调用者忽略,所以即使实际返回了值,也不会对程序逻辑产生影响,因此不判定为错误。
比如你的代码中:
type MyFuncType = (a:number) => void // 以下赋值合法,因为参数匹配,返回值会被忽略 const testFunc: MyFuncType = (a) => { return 'a' }
如何严格限制返回值必须为空?
如果你希望强制函数不能返回任何值(只能返回undefined或无return语句),可以把返回类型从void改成undefined:
type MyFuncType = (a:number) => undefined function MyFunc(a:MyFuncType) { return a(2) } // 此时会报错:类型“string”不能赋值给类型“undefined” MyFunc((a) => { return 'a'})
这样TypeScript就会严格检查返回值类型,确保函数只能返回undefined。
内容的提问来源于stack exchange,提问作者oliviarizona
相关产品推荐
相关产品推荐

