如何用构造函数重载对泛型Class表达式进行子类化


Angular的FormControl<T>被定义为接口中具有构造函数重载的类表达式。这是由于打字脚本的限制。

我能够将代码缩小到:

export interface FormControl<TValue = any> {
setValue(value: TValue): void;
}
export interface ɵFormControlCtor {
new <T>(): FormControl<T>;
new <T>(): FormControl<T | null>;
prototype: FormControl<any>;
}
export const FormControl: ɵFormControlCtor = (class FormControl<T> {
setValue(value: T): void { }
});

不幸的是,子类化FormControl<T>会触发TS2510Base constructors must all have the same return type

已经有另一个问题与此错误有关,但建议解决方案不适用于泛型类型。

那么,您将如何对FormControl进行子类化呢?

也许以某种方式也可以做另一个类表达式来对其进行子类化?

游乐场

我不确定这对你来说是否足够,但如果你的泛型类型完全填充了所有重载,它就会起作用:

class Foo<T> extends FormControl<T | null> {
}

操场

相关内容

  • 没有找到相关文章

最新更新