捕获的泛型类型传播到方法参数类型时出现问题
class AClass<ExpectedOptions, RealOptions> {
constructor(public options: RealOptions) {}
method(options: Omit<ExpectedOptions, keyof RealOptions>) {}
}
interface Options {
a: string;
b: string;
}
如果AClass直接使用,它就不起作用
const aClass = new AClass<Options>({ a: 'value a'}); // should have only 1 type argument
aClass.method({ }); // this method should be missing b property
但它与中产阶级完美配合
class A<RealOptions> extends AClass<Options, RealOptions> {
constructor(options: RealOptions) {
super(options);
}
}
const aClass = new A({ a: 'value a'});
aClass.method({ });
UPD:提供一个参数类型有一个变通方法,但我正在寻找一个具有捕获类型的oneliner
const options = { a: 'value a'};
const aClass = new AClass<Options, typeof options>(options);
aClass.method({ }); // it requires b
您想要做的事情不起作用。如果一个类型有多个泛型类型参数,则必须向编译器提供足够的信息,以便它推断出它们的所有类型。在第一种情况下,编译器没有任何信息可以推断ExpectedOptions
的类型,因此这是一个编译错误。
然而,您不需要声明新的类,只需使用类型别名即可
type A<RealOptions> = AClass<Options, RealOptions>