假设我有一个指令修饰符,它将一个静态方法添加到它称为工厂的目标:
function Directive<T extends { new (...args: any[]): {} }>(constructor: T) {
return class extends constructor {
static factory(...args): ng.IDirectiveFactory {
const c: any = () => {
return constructor.apply(this, args);
};
c.prototype = constructor.prototype;
return new c(...args);
}
};
}
我还通过一个接口添加类型:
interface BaseDirective extends ng.IDirective {
factory(): ng.IDirectiveFactory;
}
为什么在我班上声明:
@Directive
class FocusedDirective implements BaseDirective {....
我得到一个
Class 'FocusedDirective' incorrectly implements interface 'BaseDirective'. Property 'factory' is missing in type 'FocusedDirective'.
希望
@Directive
为我添加此缺少的属性是错误的吗? 最佳答案
装饰器不能更改类的类型,可以调用函数作为函数,并存储包含该方法的新类,并使用新类代替原来的类:
const FocusedDirectiveWithDirective = Directive(FocusedDirective);
通过使用类表达式,可以完全消除中间类:
const FocusedDirective = Directive(class implements BaseDirective{
});