TypeScript:未指定返回类型时抽象函数的严格类型检查问题
问题:如何让TypeScript严格检查子类实现抽象方法的返回值,禁止多余属性?
我有以下代码示例:
interface ExampleVal { val1: string; val2: number; } abstract class Example<T> { abstract getValue(): T; } class ExampleInstance extends Example<ExampleVal> { getValue() { return { val1: '', val2: 100, aaa: 'this should throw error' } } }
这段代码可以成功编译,但我希望aaa: 'this should throw error'这一行能触发类型错误,因为它不符合严格的类型要求。手动指定返回类型getValue(): ExampleVal可以正常检测出这个问题,但当存在大量同类类和抽象方法时,不想逐一手动指定返回类型,请问是否有相关配置项或其他方法解决该问题?
解决方案:启用strictFunctionTypes编译配置
TypeScript默认不会对类方法的返回值进行严格的多余属性检查,尤其是在实现抽象方法时。启用strictFunctionTypes配置可以解决这个问题:
- 在
tsconfig.json中配置:{ "compilerOptions": { "strictFunctionTypes": true } }
启用后,TypeScript会严格校验子类方法的返回类型是否与父类抽象方法的定义完全匹配,多余的属性会被立即检测到并抛出类型错误。
补充说明
如果strictFunctionTypes已启用但问题仍存在,可结合你已经开启的exactOptionalPropertyTypes以及strictNullChecks进一步强化检查,但核心解决该问题的配置是strictFunctionTypes。
若不想全局启用该配置,也可以通过类型断言临时约束返回值,但这种方式不适用于大量类的场景:
getValue() { return { val1: '', val2: 100, aaa: 'this should throw error' } as ExampleVal; // 此时会触发多余属性错误 }
内容的提问来源于stack exchange,提问作者Zsombor Szende
相关产品推荐
相关产品推荐

