Javascript 在TypeScript中使用decorator扩展类
我想用decorators扩展一个类,但不知道具体如何扩展。我目前的做法如下:Javascript 在TypeScript中使用decorator扩展类,javascript,typescript,Javascript,Typescript,我想用decorators扩展一个类,但不知道具体如何扩展。我目前的做法如下: function Foo(value: string) { return function(target: Function) { let injected = Object.assign(target.prototype, { foo: value }); return injected; } } @Foo("Hello world") class Bar { }
function Foo(value: string) {
return function(target: Function) {
let injected = Object.assign(target.prototype, { foo: value });
return injected;
}
}
@Foo("Hello world")
class Bar {
}
let instance = new Bar();
console.log(instance.foo); // Should say "Hello World"
但我不能再实例化我的类了:“TypeError:Bar不是构造函数”
我的错误在哪里?您不必从装饰器返回新对象。在这种情况下,将修改目标对象,因此
function Foo(value: string) {
return function(target: Function) {
Object.assign(target.prototype, { foo: value });
}
}
应该行得通可惜这行不通。
bar
对象保持不变,试图获取实例。foo
导致属性“foo”在类型“bar”上不存在
@nehalist您的tsconfig中是否有一个标志expericalDecorators
?它在my local和Playway@nehalist上工作,但如果您谈论的是来自typescript的警告,那只是因为TS编译器无法解析此属性。只需检查PlayGround中生成的JS这不是一个好的做法,但要抑制动态属性上的警告,可以编写console.log((instance.foo))代码>嗯,唯一值得一提的是我在NodeJS上,使用ts节点。但是,即使直接通过CLI进行编译(tsc playerly.ts--target ES5--expericalDecorators
),我仍然得到属性“foo”在类型“Bar”上不存在。
。