TypeScript 4.7.3出现“Function不是构造函数类型”错误求助
解决TypeScript类装饰器中“Type Function不是构造函数类型”的错误
问题原因:你将装饰器的
target参数类型定义为Function,但TypeScript新版本对类装饰器的目标类型校验更严格——类装饰器的参数必须是构造函数类型,普通Function类型无法保证具备可被extends的构造函数特性。解决方案:把
target的类型替换为构造函数类型new (...args: any[]) => any,该类型明确表示“可接受任意参数、返回任意实例的构造函数”,完全匹配类装饰器的目标要求。
修改后的代码:
const addFuelToRocket = (target: new (...args: any[]) => any) => { return class extends target { fuel = 100 } }
- 额外配置检查:确保你的
tsconfig.json已正确启用装饰器支持:
{ "compilerOptions": { "experimentalDecorators": true, "emitDecoratorMetadata": true // 可选,需元数据支持时开启 } }
你提到的“TS2.2以上不应出现此问题”,是因为TS2.2确实首次正式支持类装饰器,但早期版本的类型校验相对宽松;而你使用的4.7.3版本强化了类型安全性,因此需要更精确的类型定义。
内容的提问来源于stack exchange,提问作者user310291
相关产品推荐
相关产品推荐

