Menu

Typy w TypeScript: string, number, boolean i inne

Wbudowane typy TypeScript: string, number, boolean, bigint, symbol, null i undefined, a do tego krótko o tablicach i obiektach. Jak pisać adnotację typu, dlaczego nie ma typu całkowitego i dlaczego piszesz string zamiast String.

Na tej stronie są działające edytory: edytuj, uruchamiaj i od razu zobacz wynik.

Typy w TypeScript opisują, jakiego rodzaju wartość może przechowywać zmienna. Typ piszesz po dwukropku, let name: string, a kompilator odrzuca każdy kod, który umieszcza tam wartość złego rodzaju. Typy podstawowe to siedem typów prostych JavaScriptu oraz typy obiektowe dla tablic i obiektów.

Adnotacje są sprawdzane w czasie kompilacji, a potem usuwane. Uruchamiany program to zwykły JavaScript.

Typy proste

TypPrzykładowe wartościUwagi
string"hi", 'hi', `hi ${name}`Tekst. Wszystkie trzy rodzaje cudzysłowów dają ten sam typ.
number42, 3.14, -0.5, NaN, InfinityKażda liczba, całkowita czy nie. Nie ma int ani float.
booleantrue, falseTylko te dwie wartości.
bigint10n, BigInt(10)Liczby całkowite dowolnej wielkości. Wymaga targetu ES2020 lub nowszego.
symbolSymbol("id")Unikalna wartość, używana głównie jako klucz obiektu.
nullnull„Celowo puste”.
undefinedundefined„Nieustawione”. Tak też odczytuje się brakującą właściwość.

Nazwy typów pisze się małymi literami. typeof w czasie działania zwraca dla większości z nich te same słowa, więc typeof x === "number" to sposób na sprawdzenie typu prostego wartości podczas działania programu.

Adnotacje typów

Adnotacja to : Type po zmiennej, parametrze albo liście parametrów funkcji. Najważniejsze są adnotacje parametrów, bo TypeScript nie zgadnie, co przekaże wywołujący.

Gdy zmienna jest inicjalizowana w tej samej linii, adnotacja jest zwykle zbędna: let count = 10 ma już typ number. Zasady pomijania typów opisuje strona o wnioskowaniu typów.

Zły typ to błąd kompilacji

Przypisz wartość złego typu, a kompilator zatrzyma się, zanim cokolwiek się uruchomi:

Kompilator wypisuje:

index.ts(3,1): error TS2322: Type 'string' is not assignable to type 'number'.

Poprawka to konwersja wartości, port = Number("3000"), albo zmiana adnotacji, jeśli zmienna naprawdę powinna przechowywać tekst.

number: nie ma typu całkowitego

JavaScript przechowuje każdą liczbę jako 64-bitową wartość zmiennoprzecinkową, więc TypeScript ma jeden typ number. Liczby całkowite są dokładne do Number.MAX_SAFE_INTEGER (2 ** 53 - 1). Powyżej tej wartości użyj bigint.

bigint i number się nie mieszają: exact + 1 to błąd kompilacji (TS2365: Operator '+' cannot be applied to types 'bigint' and '1'., gdzie '1' to typ literałowy liczby 1), a gdyby się kiedyś uruchomiło, także TypeError w czasie działania. Przekonwertuj jedną stronę jawnie przez BigInt(1) albo Number(exact), pamiętając, że Number zaokrągla wartości spoza bezpiecznego zakresu.

Jeśli chcesz typu, który przyjmuje tylko liczby całkowite, TypeScript nie potrafi go wyrazić dla dowolnych wartości. Waliduj przez Number.isInteger tam, gdzie wartość wchodzi do programu.

boolean

boolean ma dokładnie dwie wartości, true i false. Wartości, które są tylko prawdziwe logicznie (1, "yes"), nie są typu boolean, więc zamień je na boolean przez Boolean(x) albo x !== 0.

null i undefined

Przy włączonym strict (domyślnie od TypeScript 6.0) null i undefined to osobne typy i nie należą do string, number ani żadnego innego typu. Zmienna, która może być pusta, mówi o tym przez unię:

Odczyt właściwości wartości, która może być undefined, to błąd kompilacji, dopóki jej nie sprawdzisz. Sprawdzenia, ?. i ?? opisuje strona o null i undefined.

Tablice i obiekty w skrócie

Wszystko, co nie jest typem prostym, to typ obiektowy. Trzy kształty, które spotkasz najpierw:

let tags: string[] = ["ts", "js"];               // array of strings
let point: { x: number; y: number } = { x: 1, y: 2 }; // object with two number properties
let greet: (name: string) => string = (n) => `hi ${n}`; // function type

Każdy z nich ma własną stronę: tablice, krotki (tablice o stałej długości), typy obiektowe i typy funkcji.

string, number, boolean a String, Number, Boolean

Nazwy wielką literą to typy obiektów opakowujących JavaScriptu (new String("x")), a nie zwykłych wartości. W adnotacjach używaj nazw małymi literami.

index.ts(3,7): error TS2322: Type 'String' is not assignable to type 'string'.
  'string' is a primitive, but 'String' is a wrapper object. Prefer using 'string' when possible.

Zmień String na string w pierwszej linii, a blok się uruchomi. To samo dotyczy Number, Boolean, Symbol i BigInt. (Object to inny przypadek: przyjmuje prawie każdą wartość, łącznie z typami prostymi; zobacz typy obiektowe).

Inne wbudowane typy

Kilka kolejnych typów pojawia się wcześnie. Każdy ma własną stronę.

TypZnaczenie
anyWyłącza sprawdzanie dla tej wartości. Unikaj go.
unknownDowolna wartość, ale musisz ją sprawdzić przed użyciem.
voidFunkcja nie zwraca nic użytecznego.
neverŻadnej wartości: funkcja, która zawsze rzuca wyjątek, albo niemożliwy przypadek.
objectDowolna wartość, która nie jest typem prostym.
"red" | "green"Typ literałowy: tylko te dokładne wartości.

Najczęściej zadawane pytania

Czy TypeScript ma typ całkowity?

Nie. number obejmuje zarówno liczby całkowite, jak i ułamkowe, bo JavaScript przechowuje każdą liczbę jako 64-bitową liczbę zmiennoprzecinkową. Czy liczba jest całkowita, sprawdzisz w czasie działania przez Number.isInteger(n), a gdy potrzebujesz liczb całkowitych większych niż Number.MAX_SAFE_INTEGER (2 ** 53 - 1) bez utraty precyzji, użyj bigint (10n).

Czym różni się string od String w TypeScript?

string to typ prosty, który mają literały napisów i szablony napisów. String to typ obiektu opakowującego tworzonego przez new String("x"). W adnotacjach zawsze używaj małych liter: string, number i boolean; przypisanie String do string to błąd kompilacji (TS2322).

Jakie są typy proste w TypeScript?

Te same siedem co w JavaScript: string, number, boolean, bigint, symbol, null i undefined. Wszystko inne (tablice, obiekty, funkcje, instancje klas) to typy obiektowe.

Jak zadeklarować zmienną z typem w TypeScript?

Po nazwie napisz dwukropek i typ: let count: number = 0;. W funkcji dodaj adnotację do każdego parametru i opcjonalnie do typu zwracanego: function add(a: number, b: number): number. Gdy zmienna jest inicjalizowana, zwykle możesz pominąć adnotację i pozwolić TypeScriptowi wywnioskować typ.

Czy typy TypeScript istnieją w czasie działania programu?

Nie. Kompilator sprawdza typy, a potem je usuwa, więc uruchamiany JavaScript nie ma adnotacji. W czasie działania sprawdzasz wartości operatorami JavaScriptu, takimi jak typeof, Array.isArray i instanceof.

Ilustracja języków programowania w Coddy

Ucz się programowania z Coddy

ZACZNIJ