2017-04-03 72 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參數聲明編譯此=真我得到TS4093,TS4020和TS4060。沒有參數,它工作正常,但我沒有得到任何聲明。

這似乎是因爲匿名類不能導出(公開)。

有沒有更好的書寫mixin的方法或更好的方式來獲取聲明?

回答

0

Typescript Issue 15001

這是由於打字稿的限制,並有在這幾款(現已關閉)的問題。對於現在的工作,我的解決方法是定義MixinFunction的返回類型爲T & ICtor>繞過TS 4060

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

但是因爲我們沒有alowed從聯合類型直接延伸我再有到:

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

這很混亂,希望能得到解決。