TypeScript-interfaces: van syntaxis tot interface vs type

TypeScript-interfaces

TypeScript-interface: syntaxis, extends, merging, vs type | We.Inc

Bouw een interface veld voor veld, zie de bijpassende type alias, en leer optionele en readonly members, extends, declaration merging en wanneer een type alias beter past.

Een interface geeft de vorm van een object een naam: welke properties het heeft en welk type elk ervan bevat. Maak een property optioneel met ? en onveranderlijk met readonly, bouw voort op een andere vorm met extends, en open dezelfde naam opnieuw om er meer members in samen te voegen. Interfaces laten geen spoor na in het gecompileerde JavaScript; ze sturen alleen de checker.

Interface-syntaxis in één oogopslag

Voeg velden toe in de builder hieronder, vink optioneel of readonly aan, en kopieer de interface of de gelijkwaardige type alias. De secties daaronder behandelen extends, merging en de paar gevallen waarin de keuze tussen interface en type er echt toe doet.

Veelgestelde vragen

Moet ik interface of type gebruiken?

Voor objectvormen werken beide en het handboek noemt het grotendeels persoonlijke voorkeur, met het advies interface te gebruiken totdat u een functie nodig hebt die alleen type heeft. Gebruik type voor unions, tuples, primitives en mapped of conditional types; gebruik interface als u declaration merging wilt.

Wat is declaration merging?

Een interface declareren met een naam die al bestaat, voegt er members aan toe in plaats van een fout te geven. Libraries leunen hierop zodat u hun types kunt uitbreiden, bijvoorbeeld door een property aan Window toe te voegen. Een type alias met een herhaalde naam is een fout.

Wat gebeurt er als twee samengevoegde interfaces een property verschillende types geven?

De compiler meldt een fout. Bij een intersectie van twee types wordt het conflict niet bij de declaratie gemeld; de property wordt never, wat pas later aan het licht komt en moeilijker te herleiden is.

Kan een interface een functie of een array beschrijven?

Ja. Een call signature zoals (value: string): boolean beschrijft een functie, en een index signature zoals [index: number]: string beschrijft een array-achtig object. Voor eenvoudige gevallen leest een type alias zoals type Check = (v: string) => boolean duidelijker.

Bestaan interfaces tijdens runtime?

Nee. Ze compileren naar niets, dus u kunt geen instanceof gebruiken met een interface of de keys ervan opsommen. Controleer waarden met een runtime guard en annoteer het returntype daarvan met de interface.

extends tegenover intersecties

Optioneel, readonly en index signatures

Merging om globale en library-types uit te breiden

interface vs type alias

Wat elke declaratie kan

Patronen die u vaak zult schrijven

Eén en meerdere interfaces uitbreiden

Admin krijgt elke member van User plus zijn eigen; Card combineert twee ongerelateerde vormen.

Declaration merging op Window

In een .d.ts-bestand gezet, zorgt dit dat window.appVersion overal door de typecheck komt.

Index signature en call signature

Scores accepteert elke string-key; Validator beschrijft een aanroepbare waarde.

Interface-builder

Naam van de interface

Extends (optioneel)

Naam van property {n}

Type van property {n}

Optioneel

Readonly

Property {n} verwijderen

Property toevoegen

Als interface

Als type alias

Interface kopiëren

Type kopiëren

Namen moeten beginnen met een letter, $ of _ en mogen alleen letters, cijfers, $ of _ bevatten.

Gratis beginnen · Geen creditcard nodig

Gerelateerd: Gidsen

Product

Voor wie

Functies

Bronnen

Bedrijf

Sitemap