class-transformer's plainToClass: 如何使用此函数将普通文字转换为抽象class?
class-transformer's plainToClass: How to use this function to convert the plain literal to an abstract class?
每当我这样调用 plainToClass 时:
someClass: SomeClass = plainToClass(SomeClass, somePlain)
一切都很好。但是一旦我将 SomeClass 更改为抽象并将上面的内容重写为:
someAbstractClass: SomeAbstractClass = plainToClass(SomeAbstractClass, somePlain)
我收到错误:
No overload matches this call.
Overload 1 of 2, '(cls: ClassType<BaseFeature>, plain: unknown[], options?: ClassTransformOptions): BaseFeature[]', gave the following error.
Argument of type 'typeof BaseFeature' is not assignable to parameter of type 'ClassType<BaseFeature>'.
Cannot assign an abstract constructor type to a non-abstract constructor type.
Overload 2 of 2, '(cls: ClassType<SomeAbstractClass>, plain: object, options?: ClassTransformOptions): SomeAbstractClass', gave the following error.
Argument of type 'typeof SomeAbstractClass' is not assignable to parameter of type 'ClassType<SomeAbstractClass>'
难道不能使用 plainToClass 将 plain 转换为 abstractClass 实例吗?为什么不呢?
问题是正常的 class 和抽象的 class 在 TS 中有不同的签名:
export interface AbstractType<T> extends Function {
prototype: T;
}
export type Type<T> = new (...args: any[]) => T;
由于这个差异,TS 显示错误。
通常不应该有抽象 classes 的实例,只有 classes 的实例实现了它们。不过,您可以使用 any
破解它并获得所需的行为:
const someAbstractClass: SomeAbstractClass = plainToClass(
SomeAbstractClass as any, // cast to fix the error.
somePlain,
);
每当我这样调用 plainToClass 时:
someClass: SomeClass = plainToClass(SomeClass, somePlain)
一切都很好。但是一旦我将 SomeClass 更改为抽象并将上面的内容重写为:
someAbstractClass: SomeAbstractClass = plainToClass(SomeAbstractClass, somePlain)
我收到错误:
No overload matches this call.
Overload 1 of 2, '(cls: ClassType<BaseFeature>, plain: unknown[], options?: ClassTransformOptions): BaseFeature[]', gave the following error.
Argument of type 'typeof BaseFeature' is not assignable to parameter of type 'ClassType<BaseFeature>'.
Cannot assign an abstract constructor type to a non-abstract constructor type.
Overload 2 of 2, '(cls: ClassType<SomeAbstractClass>, plain: object, options?: ClassTransformOptions): SomeAbstractClass', gave the following error.
Argument of type 'typeof SomeAbstractClass' is not assignable to parameter of type 'ClassType<SomeAbstractClass>'
难道不能使用 plainToClass 将 plain 转换为 abstractClass 实例吗?为什么不呢?
问题是正常的 class 和抽象的 class 在 TS 中有不同的签名:
export interface AbstractType<T> extends Function {
prototype: T;
}
export type Type<T> = new (...args: any[]) => T;
由于这个差异,TS 显示错误。
通常不应该有抽象 classes 的实例,只有 classes 的实例实现了它们。不过,您可以使用 any
破解它并获得所需的行为:
const someAbstractClass: SomeAbstractClass = plainToClass(
SomeAbstractClass as any, // cast to fix the error.
somePlain,
);