16

のような繰り返し関数を挿入するために 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 ミックスインを使用した別の例を次に示します。

コンポーネント:

@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();
  // ...
}

エラー:

エラーのエラー: テンプレート解析エラー: 'test' の既知のプロパティではないため、'tag' にバインドできません。("][タグ]="タグ">")

4

2 に答える 2