有时我使用 Mixins 来注入重复的函数,例如slugUrl()
.
但它不适用于 Angular 4 编译器。
export function Mixin(decorators: Function[]) {
return function (classFn: Function) {
decorators.forEach(decorator => {
Object.getOwnPropertyNames(decorator.prototype).forEach(name => {
classFn.prototype[name] = decorator.prototype[name];
});
});
};
}
@Mixin([BehaviorInjected])
export class FooComponent {
}
如果我编译这段代码,编译器会抛出:
“FooComponent”类型上不存在属性“ngClassControl”。
有任何想法吗?
编辑:因为有人问,这里是另一个使用 TS mixins 的例子,它重现了这个问题,这次是在模板级别。
成分:
@Component({
selector: 'home-page',
template: '<test [tag]="tag"></test>'
})
export class HomePageComponent extends TaggedComponent(MyComponent) {
public tag = 'hi there';
}
@Component({
selector: 'test',
template: '<div></div>'
})
export class TestComponent extends TaggedComponent(MyComponent) {}
混合:
type Constructor<T> = new(...args: any[]) => T;
export function TaggedComponent<T extends Constructor<{}>>(Base: T) {
class TaggedBase extends Base {
@Input() tag: string;
};
return TaggedBase;
}
export class MyComponent {
protected subscriptions: Subscription = new Subscription();
// ...
}
错误:
错误中的错误:模板解析错误:无法绑定到“标签”,因为它不是“测试”的已知属性。("][标签]="标签">")