TypeScript类中Getter函数返回类型与声明不符却可编译求助
问题:TypeScript中返回类型不匹配却能编译的原因?
相关代码
export class TimeSeriesDB { private static inst: TimeSeriesDB; public static db: InfluxDB; public static connected: Promise<boolean>; constructor() { const url = Settings.get('INFLUX2_URL'); const token = Settings.get('INFLUX2_TOKEN'); TimeSeriesDB.db = new InfluxDB({ url, token, }); } static async connect() { return true; } static disconnect() { // delete this.instance.db } static get instance(): TimeSeriesDB { if (this.inst === undefined) { this.inst = new TimeSeriesDB(); this.connected = this.connect(); } return this.connected; } } export default TimeSeriesDB.instance
问题说明
这段代码里,instance getter函数声明返回TimeSeriesDB类型,但实际返回的是Promise<boolean>类型的this.connected,但代码却能正常编译,这不符合预期,想知道原因。
原因分析
这种现象的核心原因是TypeScript的严格类型检查未完全启用:
- 当项目的
tsconfig.json中strict配置项设为false时,会默认关闭一系列严格检查规则,包括strictFunctionTypes(严格函数类型校验)。此时TypeScript不会严格校验函数返回值与声明类型的兼容性,对于明显的类型不匹配会采取宽松处理,甚至可能隐式将不兼容类型转为any,从而绕过类型检查。 - 若使用了较低版本的TypeScript,旧版本的类型校验逻辑存在疏漏,对函数返回类型的检查不如新版本严格,也可能出现这种情况。
如果开启strict: true(或单独开启strictFunctionTypes),TypeScript会立即抛出明确的类型错误:Type 'Promise<boolean>' is not assignable to type 'TimeSeriesDB',这才是符合预期的严格类型检查行为。
内容的提问来源于stack exchange,提问作者narumi
相关产品推荐
相关产品推荐

