gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-30 21:08:21 27 4
gpt4 key购买 nike

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

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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com