Unexpected typescript error "Cannot assign an abstract constructor type to a non-abstract constructor type." #614
Open
Description
Is there an existing issue for this?
- I have searched the existing issues
Describe the issue
I get an unexpected typescript compile error:
"Cannot assign an abstract constructor type to a non-abstract constructor type."
You can find a stackblitz here: https://stackblitz.com/edit/typescript-playground-6bnct5?file=index.ts
Models/DTOs/VMs
enum VehicleType {
car = 'car',
bus = 'bus',
}
class VehicleDto {
name: string;
type: VehicleType;
}
abstract class Vehicle {
constructor(public name: string, vehicleType: VehicleType) {}
static create(name: string, vehicleType: VehicleType): Vehicle {
switch (vehicleType) {
case VehicleType.bus:
return new Bus(name);
default:
return new Car(name);
}
}
}
class Car extends Vehicle {
constructor(name: string) {
super(name, VehicleType.car);
}
}
class Bus extends Vehicle {
constructor(name: string) {
super(name, VehicleType.bus);
}
}
Mapping configuration
import { createMapper, createMap, constructUsing } from '@automapper/core';
import { classes } from '@automapper/classes';
const mapper = createMapper({
strategyInitializer: classes(),
});
createMap(
mapper,
VehicleDto,
Vehicle,
constructUsing((source) => Vehicle.create(source.name, source.type))
);
Steps to reproduce
https://stackblitz.com/edit/typescript-playground-6bnct5?file=index.ts
Expected behavior
No typescript compile errors with the given code.
Screenshots
Minimum reproduction code
No response
Package
- I don't know.
-
@automapper/core
-
@automapper/classes
-
@automapper/nestjs
-
@automapper/pojos
-
@automapper/mikro
-
@automapper/sequelize
- Other (see below)
Other package and its version
No response
AutoMapper version
8.8.1
Additional context
No response