Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在TypeScript中使用decorator扩展类_Javascript_Typescript - Fatal编程技术网

Javascript 在TypeScript中使用decorator扩展类

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 { }

我想用decorators扩展一个类,但不知道具体如何扩展。我目前的做法如下:

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”上不存在。