使用装饰器类型的Typescript添加方法不存在

时间:2018-02-03 17:13:05

标签: typescript

我想创建一个向类添加方法的装饰器。

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

    };
  };
}


@Deco()
class Test {

}

问题是当我尝试调用添加的方法时,我收到打字稿错误:

  

属性someMethod在类型Test上不存在。

const test = new Test();

test.someMethod();

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

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

<form action="#">
    <input type="text" pattern="^.+\.png$" value="" required >
    <input type="submit" value="submit"/>
</form>