实例化通用对象时出现类型错误
TypeError while instanciating generic Object
我在尝试将 API-Data 转换为 Frontend-Dtos 时收到 TypeError: type is not a constructor
。
变换方法如下所示:
transform<T>(entities: any[]) {
const tableDtos = new Array<T>();
for (const entity of entities) {
const dto: T = this.factory.createEntity(entity);
tableDtos.push(dto);
}
return tableDtos;
}
我的工厂是这样的:
export class Factory {
create<T>(type: (new () => T)): T {
return new type();
}
}
我从 here 中获取了解决方案。我在这里错过了什么?
DTO
import { Entity} from 'src/models/api/Entity';
export class EntityTableEntry {
id: number;
name: string;
constructor(entity: Entity) {
this.id = entity.ID;
this.name = entity.Name;
}
}
实体
export interface Cost {
ID: number;
Name: string;
Description: string;
Value: number;
}
我想要一个通用方法的原因是,我需要为每个 API-Call 重新编写转换方法,这完全是一团糟!
我假设 entities
包含您要创建的对象的数据。因此,它不能用 new
调用。您要传入要创建的实际 class(可能将数据分配给新实例):
class xx {
factory: Factory = new Factory();
transform<T>(type: (new () => T), entities: any[]) {
const tableDtos = new Array<T>();
for (const entity of entities) {
const dto: T = this.factory.createEntity(type, entity);
tableDtos.push(dto);
}
return tableDtos;
}
}
class Factory {
createEntity<T>(type: (new () => T), data: any): T {
var r = new type();
Object.assign(r, data) // guessing a decent implementation here
return r;
}
}
class DataClass { a!: number }
var r = new xx().transform(DataClass, [{ a: 1 }]);
console.log(r);
我在尝试将 API-Data 转换为 Frontend-Dtos 时收到 TypeError: type is not a constructor
。
变换方法如下所示:
transform<T>(entities: any[]) {
const tableDtos = new Array<T>();
for (const entity of entities) {
const dto: T = this.factory.createEntity(entity);
tableDtos.push(dto);
}
return tableDtos;
}
我的工厂是这样的:
export class Factory {
create<T>(type: (new () => T)): T {
return new type();
}
}
我从 here 中获取了解决方案。我在这里错过了什么?
DTO
import { Entity} from 'src/models/api/Entity';
export class EntityTableEntry {
id: number;
name: string;
constructor(entity: Entity) {
this.id = entity.ID;
this.name = entity.Name;
}
}
实体
export interface Cost {
ID: number;
Name: string;
Description: string;
Value: number;
}
我想要一个通用方法的原因是,我需要为每个 API-Call 重新编写转换方法,这完全是一团糟!
我假设 entities
包含您要创建的对象的数据。因此,它不能用 new
调用。您要传入要创建的实际 class(可能将数据分配给新实例):
class xx {
factory: Factory = new Factory();
transform<T>(type: (new () => T), entities: any[]) {
const tableDtos = new Array<T>();
for (const entity of entities) {
const dto: T = this.factory.createEntity(type, entity);
tableDtos.push(dto);
}
return tableDtos;
}
}
class Factory {
createEntity<T>(type: (new () => T), data: any): T {
var r = new type();
Object.assign(r, data) // guessing a decent implementation here
return r;
}
}
class DataClass { a!: number }
var r = new xx().transform(DataClass, [{ a: 1 }]);
console.log(r);