2017-04-03 3 views
0

匿名クラスを持つこのMixinコンストラクトがスローされるので、エラーなしでコンパイルできません。typescript mixinsを書き、tscから宣言を得る方法

export type Constructor<T> = new (...args: any[]) => T; 
export interface IFooable {} 
export default function FooableMixin<T extends Constructor<{}>>(Base: T) { 
    return class extends Base implements IFooable { 
     constructor(...args: any[]) { 
      super(...args); 
     } 
    } 
} 
export class BaseBar {} 
export class FooableBar extends FooableMixin (BaseBar) {} 

tsconfigパラメータ宣言= trueでこれをコンパイルすると、TS4093、TS4020、TS4060が得られます。パラメータがなければ、うまく動作しますが、宣言はありません。

これは、匿名クラスをエクスポート(公開)できないためです。

ミックスインを書くより良い方法があるのですか、宣言を得るためのより良い方法がありますか?

答えて

0

Typescript Issue 15001

これは、活字体の制限によるものであり、この上でいくつかの(今クローズ)の問題があります。今それは私のために働いたための回避策は、周りのTS 4060

export default function FooableMixin<T extends Constructor<{}>>(Base: T): T & Constructor<IFooable<T>> { 

を取得する> T & ICtorとしてMixinFunctionの戻り値の型を定義することでした。しかし、私たちが直接組合の種類から延長するalowedされていないので、私はその後、持っていました〜へ:

export const _FooableBar = Fooable(BaseBar); 
export class FooableBar extends _FooableBar 

これはうまくいけばうまくいけば解決されます。

関連する問題