javascript - Convertiți clasa Normal în generic în TypeScript
Am o clasă pentru a obține obiecte JSON și a le converti în clasa pe care o doresc. Codul este mai jos.
import {plainToClass} from "class-transformer";
import UserDto from "../../auth/dto/user.dto";
class ConvertJson {
userData(data) {
return plainToClass(UserDto, data);
}
}
când vreau să convertesc clasa într-o clasă generică
import {plainToClass} from "class-transformer";
import UserDto from "../../auth/dto/user.dto";
class ConvertJson<T> {
userData(data) {
return plainToClass(T, data);
}
}
Primești această eroare
T se referă doar la un tip, dar este folosit aici ca o valoare
Răspuns #1
După ce am modificat codul, am descoperit că genericul din TypeScript este foarte diferit de C# sau alte limbaje, așa că am convertit codul astfel încât să aibă o atmosferă generică, dar nu și sintaxa.
import {plainToClass} from "class-transformer";
interface IClass {
new (...args : any[])
}
class ConvertJson {
constructor(private dto : IClass) {
}
userData(data) {
return plainToClass(this.dto, data);
}
}
motivul pentru care folosesc IClass în loc de any este că vreau să mă asigur că ceilalți colegi folosesc class, nu alte tipuri.
Răspunsul #2
Îmbunătățește comentariul lui Milad👇
class-transformer oferă ceva clasă generică pentru a face același lucru pe care l-a introdus el.
import { plainToClass, ClassConstructor } from "class-transformer";
class ConvertJson {
userData<TargetClass>(data: unknown, dtoClass: ClassConstructor<TargetClass>) {
return plainToClass(dtoClass, data);
}
}
Versiunea mea de class-transformer este v0.5.1
✍Notă:
plainToClassseste învechit❌
FoloseșteplainToInstanceîn schimb (este același)✅
