Interfejsy w TypeScript: od składni do interface vs type

Interfejsy w TypeScript

Interfejs w TypeScript: składnia, extends, łączenie, a type | We.Inc

Zbuduj interfejs pole po polu, zobacz odpowiadający mu alias typu i poznaj pola opcjonalne i readonly, extends, łączenie deklaracji oraz sytuacje, w których alias typu sprawdza się lepiej.

Interfejs nadaje nazwę kształtowi obiektu: jakie ma właściwości i jakiego typu jest każda z nich. Oznacz właściwość jako opcjonalną przez ?, a jako niezmienną przez readonly, rozbuduj inny kształt przez extends i zadeklaruj ponownie tę samą nazwę, aby dołączyć kolejne pola. Interfejsy nie zostawiają śladu w skompilowanym JavaScripcie; służą wyłącznie kompilatorowi.

Składnia interfejsów w skrócie

Dodaj pola w generatorze poniżej, zaznacz opcjonalne lub readonly i skopiuj interfejs albo równoważny alias typu. Sekcje niżej omawiają rozszerzanie, łączenie deklaracji i te nieliczne przypadki, w których wybór między interface a type naprawdę ma znaczenie.

Najczęściej zadawane pytania

Używać interface czy type?

Dla kształtów obiektów działa jedno i drugie, a podręcznik nazywa to głównie kwestią osobistych preferencji i sugeruje interface, dopóki nie potrzebujesz funkcji dostępnej tylko w type. Używaj type dla unii, krotek, typów prostych oraz typów mapowanych i warunkowych; używaj interface, gdy chcesz łączenia deklaracji.

Czym jest łączenie deklaracji?

Zadeklarowanie interfejsu o nazwie, która już istnieje, dodaje do niego pola zamiast zgłaszać błąd. Biblioteki na tym polegają, abyś mógł rozszerzać ich typy, na przykład dodając właściwość do Window. Alias typu z powtórzoną nazwą to błąd.

Co się stanie, jeśli dwa łączone interfejsy nadają właściwości różne typy?

Kompilator zgłosi błąd. Przy przecięciu dwóch typów konflikt nie jest zgłaszany w miejscu deklaracji; właściwość staje się never, co wychodzi na jaw później i trudniej to wyśledzić.

Czy interfejs może opisywać funkcję lub tablicę?

Tak. Sygnatura wywołania, taka jak (value: string): boolean, opisuje funkcję, a sygnatura indeksu, taka jak [index: number]: string, opisuje obiekt podobny do tablicy. W prostych przypadkach alias typu, na przykład type Check = (v: string) => boolean, czyta się łatwiej.

Czy interfejsy istnieją w czasie działania?

Nie. Kompilują się do niczego, więc nie możesz użyć instanceof z interfejsem ani wypisać jego kluczy. Sprawdzaj wartości funkcją strażnikiem w czasie działania i oznacz jej typ zwracany interfejsem.

extends a przecięcia typów

Pola opcjonalne, readonly i sygnatury indeksu

Łączenie deklaracji w celu rozszerzenia typów globalnych i bibliotecznych

interface a alias typu

Co potrafi każda z deklaracji

Wzorce, które będziesz często pisać

Rozszerzanie jednego i kilku interfejsów

Admin dostaje wszystkie pola User oraz własne; Card łączy dwa niezwiązane kształty.

Łączenie deklaracji dla Window

Umieszczone w pliku .d.ts sprawia, że window.appVersion przechodzi kontrolę typów wszędzie.

Sygnatura indeksu i sygnatura wywołania

Scores przyjmuje dowolny klucz tekstowy; Validator opisuje wartość, którą można wywołać.

Generator interfejsów

Nazwa interfejsu

Extends (opcjonalnie)

Nazwa właściwości {n}

Typ właściwości {n}

Opcjonalna

Readonly

Usuń właściwość {n}

Dodaj właściwość

Jako interfejs

Jako alias typu

Kopiuj interfejs

Kopiuj typ

Nazwy muszą zaczynać się od litery, $ lub _ i zawierać tylko litery, cyfry, $ lub _.

Zacznij za darmo · Bez karty kredytowej

Powiązane: Poradniki

Produkt

Dla kogo

Funkcje

Zasoby

Firma

Mapa strony