Menu
Coddy logo textTech

Шпаргалка по TypeScript

Последнее обновление

Базовые типы

Примитивные типы и как аннотировать переменные.

ОперацияСинтаксис
Строкаlet name: string = "Ada";
Числоlet age: number = 25;
Booleanlet ok: boolean = true;
Массив Tlet xs: number[] = [1, 2, 3];
Generic-массивlet xs: Array<string> = [];
Кортежlet pair: [string, number] = ["a", 1];
Any (без проверки)let x: any = 1;
Unknown (безопасный any)let x: unknown = JSON.parse(s);
Void (без возврата)function log(): void { … }
Never (никогда не возвращает)function fail(): never { throw … }
Null / undefinedlet n: null = null;

Вывод и аннотация типов

Когда TS выводит сам, а когда нужно аннотировать.

ОперацияСинтаксис
Выведен из значенияlet count = 0; // number
Явная аннотацияlet count: number = 0;
Параметр функцииfunction add(a: number, b: number) { … }
Тип возвратаfunction add(a: number, b: number): number { … }
Стрелочная функцияconst sq = (x: number): number => x * x;
Type assertionconst el = input as HTMLInputElement;
Const assertion (литерал)const dirs = ["up", "down"] as const;
Non-null assertionel!.focus();

Интерфейсы

Описывают форму объекта.

ОперацияСинтаксис
Объявитьinterface User { id: number; name: string; }
Опциональное свойствоinterface User { age?: number; }
Readonly-свойствоinterface User { readonly id: number; }
Сигнатура методаinterface Logger { log(msg: string): void; }
Наследование интерфейсаinterface Admin extends User { role: string; }
Index-сигнатураinterface Map { [key: string]: number; }
Реализация в классеclass Db implements Logger { … }

Type aliases и объединения

Именованные типы и комбинации через | и &.

ОперацияСинтаксис
Type aliastype ID = string | number;
Alias объектаtype User = { id: number; name: string };
Объединение (union)type Status = "idle" | "loading" | "done";
Пересечение (intersection)type Admin = User & { role: string };
Литеральный типtype Yes = "yes";
Nullabletype Maybe<T> = T | null | undefined;
Alias функцииtype Handler = (e: Event) => void;

Функции

Типизированные параметры, возвраты и перегрузки.

ОперацияСинтаксис
Опциональный параметрfunction greet(name?: string) { … }
Значение по умолчаниюfunction greet(name = "friend") { … }
Rest-параметрыfunction sum(...ns: number[]): number { … }
Тип функцииlet fn: (a: number) => number;
Вызываемый интерфейсinterface Fn { (x: number): number; }
Сигнатуры перегрузокfunction f(x: string): string; function f(x: number): number; function f(x: any) { return x; }
Void-возврат игнорируетсяconst cb: () => void = () => 42; // ok

Классы

Классы с модификаторами доступа и parameter-properties.

ОперацияСинтаксис
Объявить классclass User { name: string; }
Конструкторconstructor(name: string) { this.name = name; }
Parameter-propertyconstructor(public name: string) {}
Public / private / protectedprivate id: number;
Readonly-полеreadonly id: number;
Статический членstatic count = 0;
Getter / setterget name() { return this._name; }
Наследованиеclass Admin extends User { … }
Абстрактный классabstract class Shape { abstract area(): number; }

Дженерики (generics)

Переиспользуемые типы, параметризованные другими типами.

ОперацияСинтаксис
Generic-функцияfunction id<T>(x: T): T { return x; }
Вызов с явным типомid<string>("hi");
Generic-интерфейсinterface Box<T> { value: T; }
Generic-aliastype Pair<A, B> = [A, B];
Generic-классclass Stack<T> { items: T[] = []; }
Ограничение через extendsfunction len<T extends { length: number }>(x: T) { return x.length; }
Тип-параметр по умолчаниюinterface Box<T = string> { value: T; }
Оператор keyoftype K = keyof User; // "id" | "name"
Тип по индексуtype Name = User["name"];

Narrowing

Сужение объединения до одного типа в рантайме.

ОперацияСинтаксис
Проверка typeofif (typeof x === "string") { … }
Проверка instanceofif (e instanceof Error) { … }
Оператор inif ("name" in obj) { … }
Сужение по равенствуif (status === "done") { … }
По truthy-значениюif (value) { … }
Свой type guardfunction isUser(x: any): x is User { return "id" in x; }
Discriminated uniontype Shape = { kind: "sq"; size: number } | { kind: "ci"; r: number };
Полнота через neverconst _: never = shape;

Enum'ы

Именованные наборы констант.

ОперацияСинтаксис
Числовой enumenum Direction { Up, Down, Left, Right }
Строковый enumenum Status { Idle = "IDLE", Done = "DONE" }
Использовать значениеlet d: Direction = Direction.Up;
Const enum (инлайн)const enum Color { Red, Green, Blue }
Объединение литералов (современно)type Status = "idle" | "done";

Utility-типы

Встроенные хелперы, преобразующие существующие типы.

ОперацияСинтаксис
Все свойства опциональныPartial<User>
Все свойства обязательныRequired<User>
Все свойства readonlyReadonly<User>
Выбрать подмножество ключейPick<User, "id" | "name">
Исключить один или несколько ключейOmit<User, "password">
Объект с заданными ключамиRecord<string, number>
Исключить из объединенияExclude<"a" | "b" | "c", "a">
Оставить только из объединенияExtract<"a" | "b", "a" | "c">
Убрать null / undefinedNonNullable<string | null>
Тип возврата функцииReturnType<typeof fn>
Кортеж параметровParameters<typeof fn>
Тип разрешённого promiseAwaited<Promise<string>>

Модули

Импорт и экспорт между файлами.

ОперацияСинтаксис
Именованный exportexport function add(a: number, b: number) { … }
Default exportexport default class User { … }
Реэкспортexport { User } from "./user";
Именованный importimport { add } from "./math";
Default importimport User from "./user";
Импорт только типаimport type { User } from "./user";
Импортировать всёimport * as math from "./math";
Triple-slash директива/// <reference types="node" />

Основы tsconfig

Флаги компилятора, которые стоит знать.

ОпцияЭффект
"strict": trueВключает все строгие проверки (рекомендуется).
"target": "ES2022"Версия JavaScript, в которую компилирует tsc.
"module": "ESNext"Система модулей в выходных файлах.
"moduleResolution": "bundler"Разрешение модулей как в современных сборщиках.
"jsx": "react-jsx"Включает JSX для React 17+.
"esModuleInterop": trueЧище default-импорты из CommonJS.
"skipLibCheck": trueПропускает проверку типов в node_modules (быстрее).
"noEmit": trueТолько проверка типов — сборку делает bundler.

Самый частый синтаксис TypeScript на одной странице. Это быстрая справка для повседневного TS: базовые типы, интерфейсы, type aliases, дженерики, объединения, narrowing и встроенные utility-типы.

Всё здесь — это стандартный TypeScript, который компилируется через tsc и работает везде, где работает современный JavaScript. Копируй, что нужно, или попробуй любой сниппет вживую в TypeScript playground — ничего ставить не надо.

FAQ по шпаргалке TypeScript

Эта шпаргалка по TypeScript бесплатная?
Да. Эта шпаргалка по TypeScript полностью бесплатна, регистрация не нужна. Добавь в закладки и возвращайся, когда нужно посмотреть тип, интерфейс или utility-тип.
В чём разница между interface и type alias?
Оба могут описывать форму объекта и в большинстве повседневных случаев взаимозаменяемы. Interfaces можно повторно открывать и расширять между файлами (declaration merging), это полезно для типов библиотек. Type aliases могут именовать объединения, пересечения, кортежи и mapped-типы — формы, которые нельзя выразить через interface. Частое правило: interface для публичных форм объектов, type для объединений, кортежей и вычисляемых типов.
В чём разница между any и unknown?
any полностью отключает проверку типов — компилятор разрешит с ним всё. unknown типобезопасен: его нужно сузить (через typeof, instanceof или type guard), прежде чем использовать. Предпочитай unknown для данных извне — JSON.parse, fetch и т. п. — он заставит провалидировать перед использованием.
Нужно ли учить JavaScript до TypeScript?
Да — TypeScript это JavaScript с системой типов сверху, так что все навыки JS пригодятся. Если ты ещё закрепляешь основы JS (массивы, объекты, async/await), хорошее начало — шпаргалка по JavaScript и бесплатный JavaScript-курс Coddy, который проходит то же самое интерактивно.
Можно ли практиковать TypeScript онлайн?
Да. Открой TypeScript playground и запускай любой сниппет из этой шпаргалки в браузере — ничего ставить не надо. Когда захочешь структуры, начни с лендинга JavaScript и применяй типы с этой страницы сверху.
Coddy programming languages illustration

Изучайте TypeScript с Coddy

НАЧАТЬ