如何编写 typescript mixin 并从 tsc 获取声明
How to write typescript mixins and get declarations from tsc
我无法正确编译,因为这个带有匿名 class 的 Mixin 构造抛出。
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。没有参数它工作正常但是我没有得到任何声明。
好像是因为匿名的class无法导出(madepublic)。
是否有更好的编写 mixins 的方法或更好的方法来获取声明?
这是由于 Typescript 的限制,并且有几个(现已关闭)问题。目前对我有用的解决方法是将 MixinFunction 的 return 类型定义为 T & ICtor> 以绕过 TS 4060。
export default function FooableMixin<T extends Constructor<{}>>(Base: T): T & Constructor<IFooable<T>> {
但是由于我们不能直接从联合类型扩展,所以我不得不:
export const _FooableBar = Fooable(BaseBar);
export class FooableBar extends _FooableBar
这很乱,希望能得到解决。
我无法正确编译,因为这个带有匿名 class 的 Mixin 构造抛出。
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。没有参数它工作正常但是我没有得到任何声明。
好像是因为匿名的class无法导出(madepublic)。
是否有更好的编写 mixins 的方法或更好的方法来获取声明?
这是由于 Typescript 的限制,并且有几个(现已关闭)问题。目前对我有用的解决方法是将 MixinFunction 的 return 类型定义为 T & ICtor> 以绕过 TS 4060。
export default function FooableMixin<T extends Constructor<{}>>(Base: T): T & Constructor<IFooable<T>> {
但是由于我们不能直接从联合类型扩展,所以我不得不:
export const _FooableBar = Fooable(BaseBar);
export class FooableBar extends _FooableBar
这很乱,希望能得到解决。