Vad är det bästa sättet att skapa ett objekt från ett interface i TypeScript
Jag har använt TypeScript i ett år och varje gång jag behöver ett objekt att skicka, måste jag göra det på ett fult sätt eller manuellt.
I TypeScript finns det gränssnitt för typdefinition och de innehåller alla parametrar vi behöver. Finns det ett sätt att skapa ett objekt från det?
exempel :
export interface User {
name: string;
email: string;
}
Jag vill att nedanstående kod ska automatiseras vilket jag inte kan göra från gränssnittet rater, jag har skapat en klass med konstruktor.
user {
name: ''/null/undefined,
email: ''/null/undefined
}
let user: User = new User() // this will show error
Men jag kan skapa ett nytt objekt av nedanstående klass.
export class User {
constructor() {
name: string;
email: string;
}
}
new User();
Vilket är bättre? Att skapa en konstruktörklass eller ett gränssnitt?
Svar #1
Ja, du kan tilldela värde direkt till gränssnittet och om man ser till det, om du inte behöver tilldela/instansera alla egenskaper som definieras i gränssnittet, kan du markera dem som valfria med ?. I följande exempel är e-post markerad som valfri och den efterföljande tilldelningen av användare kommer att vara ett giltigt uttalande.
interface User {
name: string;
email?: string;
}
let user: User = { name: '' };
Svar #2
Jag tror inte att det finns något sätt.
Interface och klass är två olika saker och har olika användningsområden. Interfaces är bara strukturer och kan inte ha en instans. Om du tittar på den kompilerade TypeScript som genereras till JavaScript, kommer du inte att hitta interfaces någonstans.
Så gränssnitten finns bara vid kompilering och inte vid körning.
Men klasserna körs vid körtid. Så när du säger new User(), skapas en instans av den klassen som den är i den genererade JavaScripten.
du kan också utforska abstrakta klasser om det passar i din situation.
