javascript - Konvertera Normal-klassen till generisk i typescript
Jag har en klass för att hämta JSON-objekt och konvertera dem till den klass jag vill ha. Koden är nedan.
import {plainToClass} from "class-transformer";
import UserDto from "../../auth/dto/user.dto";
class ConvertJson {
userData(data) {
return plainToClass(UserDto, data);
}
}
när jag vill konvertera klassen till en generisk klass
import {plainToClass} from "class-transformer";
import UserDto from "../../auth/dto/user.dto";
class ConvertJson<T> {
userData(data) {
return plainToClass(T, data);
}
}
Jag får detta fel
T refererar bara till en typ, men används här som ett värde
Svar #1
Efter att ha justerat koden upptäckte jag att TypeScript-generics är väldigt olika från C# eller andra språk, så jag konverterade koden till detta så att den har en generisk känsla men inte syntaxen.
import {plainToClass} from "class-transformer";
interface IClass {
new (...args : any[])
}
class ConvertJson {
constructor(private dto : IClass) {
}
userData(data) {
return plainToClass(this.dto, data);
}
}
anledningen till att jag använder IClass istället för any är att jag vill säkerställa att andra teammedlemmar använder class, inte andra typer.
Svar #2
Förbättra från Milads kommentar👇
class-transformer tillhandahåller någon generisk klass för att göra samma sak som han introducerade.
import { plainToClass, ClassConstructor } from "class-transformer";
class ConvertJson {
userData<TargetClass>(data: unknown, dtoClass: ClassConstructor<TargetClass>) {
return plainToClass(dtoClass, data);
}
}
Min class-transformer-version är v0.5.1
✍Notera:
plainToClasssär föråldrat❌
AnvändplainToInstanceistället (det är samma)✅
