typescript 添加装饰器类型的方法不存在

标签 typescript

我想创建一个装饰器,为类添加一个方法。

export function Deco() {
  return function<T extends { new (...args: any[]): {} }>(constructor: T) {
    constructor.prototype.someMethod = function() {

    };
  };
}


@Deco()
class Test {

}

问题是当我尝试调用添加的方法时,出现 typescript 错误:

Property someMethod does not exist on type Test.

const test = new Test();

test.someMethod();

我该如何解决这个问题?

最佳答案

装饰器不能影响类型的结构。有一个简单的解决方法。用类调用装饰器,并在函数内部用你想要的方法创建一个派生类。该函数的结果将是新的“装饰”类,它将具有所有方法:

export function Deco() {
    return function <T extends { new(...args: any[]): {} }>(constructor: T) {
        return class extends constructor {
            someMethod() {

            }
        }
    };
}


let Test = Deco()(class {
    // Other stuff
});

const test = new Test();
test.someMethod();

关于 typescript 添加装饰器类型的方法不存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48599889/

相关文章:

angular - 错误 TS6200 : Definitions of the following identifiers conflict with those in another file (@types/jasmine)

javascript - Json 数据到 typescript 模型

javascript - 如何从模型 Angular 中填充类属性?

javascript - gulp-typescript 正在编译所有 .ts 文件,而不仅仅是来自特定位置的文件

angular - 如何在 Angular2 中绑定(bind)列表?

javascript - typescript 2.1 with async/await 为 angularjs 生成 ES5/ES3 目标

*ngFor 循环中的 Angular 2 内联编辑

typescript - 如何在 Typescript 中强制属性之间的相互依赖

javascript - 迭代 typescript map 失败

typescript - typescript 中未定义与未分配的变量