TypeScript能否检测重载函数中返回类型与声明不匹配的问题?
解决TypeScript重载函数返回类型不检查的问题
你遇到的问题是TypeScript不会自动校验重载函数实现分支的返回类型是否匹配对应重载声明的类型——因为实现函数的返回值被声明为string | number联合类型,任何返回该联合类型内的值都会被允许,不管对应分支的重载要求是什么。
要让TypeScript在返回错误类型时触发提示,你可以将实现函数的返回类型改为条件类型,让它根据输入参数的具体值来约束返回类型:
function getValue(returnString: true): string; function getValue(returnString: false): number; function getValue(returnString: boolean): returnString extends true ? string : number { if (returnString) { return 7; // 此时会触发错误:Type 'number' is not assignable to type 'string' } return 7; // 这个返回符合要求,无错误 }
原理说明
当实现函数的返回类型使用returnString extends true ? string : number这种条件类型时,TypeScript会根据returnString的具体布尔值,在每个分支中推断出精确的返回类型要求:
- 当
returnString为true时,返回类型必须是string - 当
returnString为false时,返回类型必须是number
这样就能自动校验每个分支的返回值是否符合对应重载声明的类型,避免在长函数中意外返回错误类型。
内容的提问来源于stack exchange,提问作者ptf
相关产品推荐
相关产品推荐

