2017-04-03 84 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 

这很混乱,希望能得到解决。