Иногда я использую 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 {
}
Если я скомпилирую этот код, компилятор выбрасывает:
Свойство 'ngClassControl' не существует в типе 'FooComponent'.
Любые идеи?
Изменить: поскольку был кто-то, кто спросил, вот еще один пример использования 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();
// ...
}
Ошибка:
Ошибка в ошибке: ошибки анализа шаблона: не удается привязать к тегу, поскольку он не является известным свойством "теста". ( "] [Тег] =" тег " > " )