Ich bin zu der Lösung gekommen, dass man immer Typen statt Schnittstellen verwenden sollte. Lassen Sie uns zusammenfassen, warum!!
type Address = string; const address: Address = '123 Hallway'
Aber mit einer Schnittstelle wie:
kann man solche Dinge nicht machen
interface Address = string; //error const address: Address = '123 Hallway'
Weil Schnittstellenaliase nur Objekte definieren können. Wir müssen die Struktur komplett ändern, wenn wir eine Schnittstelle wie diese verwenden möchten:
interface Address { address: string; } const address: Address = { address: '12 3 Hallway' }
Das ist das erste Problem mit Schnittstellen.
type Address = string | string[] ; const address: Address = '123 Hallway' const newAddress: Address= ['123 Hallway', 'Flag Plaza']
Zeichenfolge | string[] wird als Union-Typ bezeichnet, die Adresse kann ein String oder ein String-Array sein.
Sie können solche Dinge mit dem Schnittstellenalias tun.
type User = { name: string; age: number; created_at: Date; }
Angenommen, wir haben ein Gastobjekt, das nicht angemeldet ist, aber wir können überprüfen, wann es erstellt wurde (das erste Mal auf der Seite gelandet ist). In diesem Szenario ist der Gast wie ein Benutzer, aber kein tatsächlicher Benutzer. Wir möchten die Eigenschaft „created_at“ in „Guest“ vom Benutzertyp „Alias“ haben. Wir machen es so:
type Guest = Omit
Technisch ist es mit der Schnittstelle möglich, aber sehen Sie, wie es funktioniert:
type Guest extends Omit{}
Es funktioniert, aber es ist eine hässliche Syntax, nicht wahr?
type Address = [string, number, string] ; const address: Address = ['Hallway', 2, 'Abdul Plaza']
Aber mit der Schnittstelle sehen Sie, wie wir es machen:
type Address extends Array{ 0: string 1: number; 2: string; } const address: Address = ['Hallway', 2, 'Abdul Plaza']
Schon wieder hässliche Syntax.
const love_bonito ={ level: 1, store_id: 'scad_12hdedhefgfeaa', country: ['US','PK','IND'], user: { user_id: "blah', username: 'nishat', likes: 421, }, }; // let's extract type for love_bonito type LoveBonito = typeOf love_bonito; // or even something inside love_bonito type User = typeOf love_bonito.user;
Der Bonus hierfür ist, dass wir das auch tun können, wenn wir jetzt schon Level immer eins und nichts anderes haben:
const love_bonito ={ level: 1, store_id: 'scad_12hdedhefgfeaa', country: ['US','PK','IND'], user: { user_id: "blah'; username: 'nishat'; likes: 421; }, } as const // let's extract type for love_bonito type LoveBonito = typeOf love_bonito // or even something inside love_bonito type User = typeOf love_bonito.user
Jetzt wird die Stufe als 1 und nicht als irgendeine Zahl abgeleitet.
interface Home { rooms: number; light_bulbs: 12; rented_to: "Abu Turab"; } interface Home { fans: 16; } // final type interface Home { rooms: 3; light_bulbs: 12; rented_to: "Abu Turab"; fans: 16; }
Wir können den Typalias nicht neu deklarieren. Sie denken vielleicht: „Oh! Sheraz, das ist ein Pluspunkt der Schnittstelle“, aber das ist eigentlich nicht der Fall!!!
Es klingt verwirrend, wenn in Ihrer gesamten Codebasis mehrere Deklarationen mit demselben Bezeichner vorhanden sind. Es kommt mir wirklich verwirrend vor.
Angenommen, Sie arbeiten mit einem Team und kennen den Typ eines Objekts (mit der Schnittstelle deklarierte Typen), aber jemand in Ihrem Team deklariert es neu und ändert es. Was würden Sie tun?
Aber mit dem Typalias wird dieses Problem auch gelöst. Wenn Sie einen Typ erneut deklarieren, wird ein Fehler ausgegeben
doppelte Kennung
Das obige ist der detaillierte Inhalt vonTyp ✔ vs. Schnittstelle ❌: Warum Sie in Typoskript den Typ gegenüber der Schnittstelle wählen sollten.. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!