Menu
Coddy logo textTech

TypeScript Cheat Sheet: ściąga z TS

Ostatnia aktualizacja

Typy podstawowe

Typy prymitywne i adnotacje zmiennych.

OperacjaSkładnia
Stringlet name: string = "Ada";
Liczbalet age: number = 25;
Wartość logicznalet ok: boolean = true;
Tablica elementów Tlet xs: number[] = [1, 2, 3];
Tablica generycznalet xs: Array<string> = [];
Krotkalet pair: [string, number] = ["a", 1];
Any (rezygnacja z typowania)let x: any = 1;
Unknown (bezpieczniejsze any)let x: unknown = JSON.parse(s);
Void (brak wartości zwracanej)function log(): void { … }
Never (nigdy nie zwraca)function fail(): never { throw … }
Null / undefinedlet n: null = null;

Wnioskowanie typów i adnotacje

Kiedy pozwolić TS wnioskować typ, a kiedy dodać adnotację.

OperacjaSkładnia
Wnioskowany z wartościlet count = 0; // number
Jawna adnotacjalet count: number = 0;
Parametr funkcjifunction add(a: number, b: number) { … }
Typ zwracanyfunction add(a: number, b: number): number { … }
Funkcja strzałkowaconst sq = (x: number): number => x * x;
Asercja typuconst el = input as HTMLInputElement;
Asercja const (literał)const dirs = ["up", "down"] as const;
Asercja non-nullel!.focus();

Interfejsy

Opisywanie kształtu obiektu.

OperacjaSkładnia
Deklaracjainterface User { id: number; name: string; }
Właściwość opcjonalnainterface User { age?: number; }
Właściwość tylko do odczytuinterface User { readonly id: number; }
Sygnatura metodyinterface Logger { log(msg: string): void; }
Rozszerzenie innego interfejsuinterface Admin extends User { role: string; }
Sygnatura indeksuinterface Map { [key: string]: number; }
Implementacja w klasieclass Db implements Logger { … }

Aliasy typów i unie

Nadawanie nazwy typowi i łączenie typów przez | i &.

OperacjaSkładnia
Alias typutype ID = string | number;
Alias typu obiektowegotype User = { id: number; name: string };
Typ uniitype Status = "idle" | "loading" | "done";
Typ przecięciatype Admin = User & { role: string };
Typ literałowytype Yes = "yes";
Typ dopuszczający nulltype Maybe<T> = T | null | undefined;
Alias typu funkcjitype Handler = (e: Event) => void;

Funkcje

Typowane parametry, wartości zwracane i przeciążenia.

OperacjaSkładnia
Parametr opcjonalnyfunction greet(name?: string) { … }
Parametr domyślnyfunction greet(name = "friend") { … }
Parametry restfunction sum(...ns: number[]): number { … }
Typ funkcjilet fn: (a: number) => number;
Interfejs wywoływalnyinterface Fn { (x: number): number; }
Sygnatury przeciążeńfunction f(x: string): string; function f(x: number): number; function f(x: any) { return x; }
Ignorowana wartość zwracana (void)const cb: () => void = () => 42; // ok

Klasy

Klasy z modyfikatorami dostępu i właściwościami parametrów.

OperacjaSkładnia
Deklaracja klasyclass User { name: string; }
Constructorconstructor(name: string) { this.name = name; }
Właściwość parametruconstructor(public name: string) {}
Public / private / protectedprivate id: number;
Pole tylko do odczytureadonly id: number;
Składowa statycznastatic count = 0;
Getter / setterget name() { return this._name; }
Dziedziczenieclass Admin extends User { … }
Klasa abstrakcyjnaabstract class Shape { abstract area(): number; }

Generyki

Typy wielokrotnego użytku sparametryzowane innymi typami.

OperacjaSkładnia
Funkcja generycznafunction id<T>(x: T): T { return x; }
Wywołanie z jawnym typemid<string>("hi");
Interfejs generycznyinterface Box<T> { value: T; }
Generyczny alias typutype Pair<A, B> = [A, B];
Klasa generycznaclass Stack<T> { items: T[] = []; }
Ograniczenie przez extendsfunction len<T extends { length: number }>(x: T) { return x.length; }
Domyślny parametr typuinterface Box<T = string> { value: T; }
Operator keyoftype K = keyof User; // "id" | "name"
Typ dostępu przez indekstype Name = User["name"];

Zawężanie typów (narrowing)

Zawężenie unii do jednego typu w czasie działania.

OperacjaSkładnia
Sprawdzenie typeofif (typeof x === "string") { … }
Sprawdzenie instanceofif (e instanceof Error) { … }
Operator inif ("name" in obj) { … }
Zawężanie przez równośćif (status === "done") { … }
Prawdziwość (truthiness)if (value) { … }
Własny type guardfunction isUser(x: any): x is User { return "id" in x; }
Unia z dyskryminatoremtype Shape = { kind: "sq"; size: number } | { kind: "ci"; r: number };
Sprawdzenie wszystkich przypadków przez neverconst _: never = shape;

Enumy

Nazwane zbiory stałych.

OperacjaSkładnia
Enum liczbowyenum Direction { Up, Down, Left, Right }
Enum tekstowyenum Status { Idle = "IDLE", Done = "DONE" }
Użycie wartościlet d: Direction = Direction.Up;
Const enum (wstawiany w miejscu)const enum Color { Red, Green, Blue }
Unia literałów (nowoczesne podejście)type Status = "idle" | "done";

Utility types

Wbudowane pomocniki, które przekształcają istniejące typy.

OperacjaSkładnia
Wszystkie właściwości opcjonalnePartial<User>
Wszystkie właściwości wymaganeRequired<User>
Wszystkie właściwości tylko do odczytuReadonly<User>
Wybór podzbioru kluczyPick<User, "id" | "name">
Pominięcie jednego lub kilku kluczyOmit<User, "password">
Obiekt o podanych kluczachRecord<string, number>
Wykluczenie z uniiExclude<"a" | "b" | "c", "a">
Zachowanie tylko części uniiExtract<"a" | "b", "a" | "c">
Usunięcie null / undefinedNonNullable<string | null>
Typ zwracany funkcjiReturnType<typeof fn>
Krotka parametrów funkcjiParameters<typeof fn>
Typ rozwiązanej obietnicy (Awaited)Awaited<Promise<string>>

Moduły

Import i eksport między plikami.

OperacjaSkładnia
Eksport nazwanyexport function add(a: number, b: number) { … }
Eksport domyślnyexport default class User { … }
Ponowny eksportexport { User } from "./user";
Import nazwanyimport { add } from "./math";
Import domyślnyimport User from "./user";
Import samego typuimport type { User } from "./user";
Import wszystkiegoimport * as math from "./math";
Dyrektywa z potrójnym ukośnikiem/// <reference types="node" />

Najważniejsze opcje tsconfig

Flagi kompilatora, które warto znać.

OpcjaEfekt
"strict": trueWłącza wszystkie sprawdzenia trybu strict (zalecane).
"target": "ES2022"Wersja JavaScriptu generowana przez tsc.
"module": "ESNext"System modułów w wygenerowanym kodzie.
"moduleResolution": "bundler"Rozwiązuje moduły tak jak nowoczesne bundlery.
"jsx": "react-jsx"Włącza JSX dla React 17+.
"esModuleInterop": trueCzystsze domyślne importy z modułów CommonJS.
"skipLibCheck": truePomija sprawdzanie typów w node_modules (szybsze budowanie).
"noEmit": trueTylko sprawdzanie typów: generowanie kodu zostaw bundlerowi.

Najczęściej używana składnia TypeScriptu na jednej stronie. Ten TypeScript cheat sheet to szybka ściąga do codziennej pracy z TS: typy podstawowe, interfejsy, aliasy typów, generyki, unie, zawężanie typów i wbudowane utility types. TypeScript opiera się na JavaScripcie, więc miej pod ręką JavaScript cheat sheet z podstawową składnią.

Wszystko tutaj to standardowy TypeScript, który kompiluje się przez tsc i działa wszędzie tam, gdzie nowoczesny JavaScript. Skopiuj to, czego potrzebujesz, albo uruchom dowolny fragment w edytorze online TypeScriptu, bez instalacji. Typy to dla ciebie nowość? Darmowy interaktywny kurs TypeScriptu w Coddy wprowadza je krok po kroku, zaczynając od JavaScriptu.

TypeScript cheat sheet: FAQ

Czy ten TypeScript cheat sheet jest darmowy?
Tak. Ten TypeScript cheat sheet jest całkowicie darmowy i nie wymaga rejestracji. Dodaj go do zakładek i wracaj, gdy potrzebujesz sprawdzić typ, interfejs albo utility type.
Czym różni się interfejs od aliasu typu?
Oba mogą opisywać kształt obiektu i w większości codziennych przypadków można ich używać zamiennie. Interfejsy można ponownie otwierać i rozszerzać w różnych plikach (łączenie deklaracji), co przydaje się przy typach bibliotek. Aliasy typów mogą nazywać unie, przecięcia, krotki i typy mapowane, czyli kształty, których nie wyrazisz przez interface. Popularna zasada: używaj interface dla publicznych kształtów obiektów, a type dla unii, krotek i typów obliczanych.
Czym różni się any od unknown?
any całkowicie wyłącza sprawdzanie typów: kompilator pozwoli zrobić z taką wartością wszystko. unknown jest bezpieczny typowo: zanim go użyjesz, musisz go zawęzić (przez typeof, instanceof lub type guard). Wybieraj unknown dla wartości z zewnętrznych źródeł, takich jak JSON.parse czy fetch: wymusza walidację przed użyciem.
Czy muszę znać JavaScript przed nauką TypeScriptu?
Tak. TypeScript to JavaScript z nałożonym systemem typów, więc każda umiejętność z JavaScriptu się przydaje. Jeśli wciąż budujesz podstawy JS (tablice, obiekty, async/await), dobrym punktem startu jest JavaScript cheat sheet, a darmowy kurs JavaScriptu w Coddy omawia to samo interaktywnie.
Czy mogę ćwiczyć TypeScript online?
Tak. Otwórz edytor online TypeScriptu, aby uruchomić dowolny fragment z tej ściągi w przeglądarce, bez instalacji. Gdy chcesz nauki krok po kroku, zacznij od kursu JavaScriptu i nakładaj na niego typy z tej strony.
Ilustracja języków programowania w Coddy

Naucz się języka TypeScript z Coddy

ZACZNIJ