You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

报错TestDecor_1.TestDeco不是构造函数,求结合代码排查解决

问题分析与解决方案

错误原因

你碰到的'TestDecor_1.TestDeco is not a constructor'错误,核心问题出在类装饰器的返回值处理逻辑上。

先看你的controller装饰器代码:

export const controller = (path) => (target) => target.prototype[symbolPrefix] = path;

这里的箭头函数末尾是一个赋值表达式target.prototype[symbolPrefix] = path,而赋值表达式的返回值是等号右侧的path(也就是你传入的字符串'aaa')。

在TypeScript的规则里,类装饰器如果返回了一个值,这个值会直接替换掉原来的类。所以你的@controller('aaa')装饰器执行后,原本的TestDeco类被替换成了字符串'aaa'——当你尝试new TestDeco('bb')时,自然会报错,因为字符串根本不是构造函数。

解决办法

修正类装饰器的逻辑,确保它在修改完原型属性后,返回原类(而不是赋值表达式的结果)。只需要调整DecorTest.ts里的controller装饰器:

export const symbolPrefix = Symbol('prefix');
export const controller = (path) => (target) => {
  // 给类的原型添加标记属性
  target.prototype[symbolPrefix] = path;
  // 必须返回原类,避免原类被替换
  return target;
};

这样装饰器只会给TestDeco的原型添加symbolPrefix属性,不会替换掉原类,你就能正常用new TestDeco('bb')创建实例了。

额外验证(可选)

如果想确认装饰器是否生效,可以在app.ts里加一段代码验证:

import {TestDeco, symbolPrefix} from './router/TestDecor'; // 记得导入symbolPrefix
const testdec = new TestDeco('bb');
console.log(testdec[symbolPrefix]); // 应该输出 'aaa'

内容的提问来源于stack exchange,提问作者kai wen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:51:38