Перейти к основному содержимому

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


Справочник-шпаргалка по TypeScript — типы, синтаксис, стандартная библиотека, типовые паттерны. Не заменяет пошаговое обучение.

Учебный раздел (18 статей + практика): TypeScript — о разделе. Карта "блок 301 → учебная статья": индекс 5-10/2.

Справочные таблицы​

Содержание справочника​


1. Основы типизации​

Как создавать типы и что это даёт​

В TypeScript типы создают несколькими способами. Чаще всего используют type, interface, typeof, keyof, дженерики и встроенные utility-типы.

Что это даёт на практике:

  • ошибки ловятся на этапе компиляции, до запуска кода;
  • автодополнение в IDE становится точнее;
  • рефакторинг проходит безопаснее;
  • контракт между модулями становится явным.

Способы создания типов​

Через type

type User = {
id: string;
email: string;
isActive: boolean;
};

Подходит для объединений, пересечений, алиасов и вычисляемых типов.

Через interface

interface Product {
sku: string;
price: number;
}

Подходит для публичных контрактов объектов и class API.

Через typeof по существующему значению

const defaults = {
retries: 3,
timeoutMs: 5000
};

type Defaults = typeof defaults;
// { retries: number; timeoutMs: number }

Позволяет не дублировать структуру вручную.

Через keyof для набора ключей

type UserField = keyof User;
// "id" | "email" | "isActive"

Полезно для безопасной работы с именами полей.


Примитивные типы​

TypeScript поддерживает следующие примитивные типы:

  • string — строка текста
  • number — числовое значение (включая целые и дробные)
  • boolean — логическое значение (true или false)
  • bigint — целое число произвольной длины
  • symbol — уникальный и неизменяемый идентификатор
  • undefined — значение, присваиваемое переменной, которая объявлена, но не инициализирована
  • null — явное отсутствие значения

Специальные типы​

  • any — отключает проверку типов; переменная может принимать любое значение
  • unknown — безопасная альтернатива any; требует проверки перед использованием
  • never — тип, представляющий значения, которые никогда не возникают (например, функция, выбрасывающая ошибку или зацикливающаяся)
  • void — тип, указывающий отсутствие возвращаемого значения у функции

Тип object​

Тип object описывает любой непримитивный тип. Он не включает null.

let obj: object = { a: 1 };
obj = [1, 2, 3];
obj = () => {};

Этот тип редко используется напрямую. Предпочтение отдается более точным описаниям структуры.


2. Составные типы​

Объектные типы​

Объектный тип описывает форму объекта через перечисление свойств и их типов:

type User = {
id: number;
name: string;
isActive: boolean;
};

Свойства могут быть опциональными:

type Config = {
theme?: 'light' | 'dark';
timeout?: number;
};

Свойства могут быть только для чтения:

type Point = {
readonly x: number;
readonly y: number;
};

Массивы​

Массивы описываются двумя способами:

  • Синтаксис T[]:
let numbers: number[] = [1, 2, 3];
  • Синтаксис Array<T>:
let strings: Array<string> = ['a', 'b'];

Кортежи (Tuples)​

Кортеж — массив фиксированной длины с известными типами элементов:

let rgb: [number, number, number] = [255, 128, 0];

Кортежи могут содержать опциональные элементы и остаточные параметры:

type HTTPResponse = [number, string?, ...string[]];

Коллекции и структуры данных​

TypeScript типизирует не только примитивы и объекты, но и стандартные коллекции JavaScript. Ниже — основные варианты и типичные сценарии использования.


Array<T>​

Массив для однотипных элементов, когда важны порядок и перебор:

const users: string[] = ['Ann', 'Bob', 'Max'];
const ages: Array<number> = [20, 25, 31];

Используйте, если нужен список значений одного типа.


Tuple​

Кортеж подходит, когда фиксированы длина и порядок элементов:

type Point2D = [number, number];
type ApiResult = [status: number, body: string];

Используйте для координат, пар значений, результатов вида [data, error].


Record<K, V>​

Тип словаря "ключ -> значение" на базе объекта:

type Role = 'admin' | 'editor' | 'user';
type Permissions = Record<Role, string[]>;

Используйте, когда ключи известны заранее и обычно строковые/литеральные.


Map<K, V>​

Коллекция пар "ключ -> значение" с поддержкой любых типов ключей:

const sessions = new Map<number, { token: string }>();
sessions.set(101, { token: 'abc' });

Чаще выбирают Map, если:

  • ключи не ограничены строками;
  • нужны частые вставки и удаления;
  • важен предсказуемый порядок вставки.

Set<T>​

Коллекция уникальных значений:

const uniqueIds = new Set<number>([1, 2, 2, 3]); // 1, 2, 3
uniqueIds.add(4);

Удобно для дедупликации и быстрых проверок наличия значения.


WeakMap<K extends object, V> и WeakSet<T extends object>​

"Слабые" коллекции, которые не мешают сборщику мусора удалять объекты-ключи:

const cache = new WeakMap<object, { parsed: boolean }>();
const visited = new WeakSet<object>();

Полезны для метаданных объектов и временных кешей, привязанных к жизненному циклу объекта.


Что выбирать на практике​
  • Array<T> — просто список элементов одного типа.
  • Tuple — фиксированная структура по позициям.
  • Record<K, V> — словарь с заранее известными ключами.
  • Map<K, V> — динамический словарь с гибкими ключами.
  • Set<T> — множество уникальных значений.
  • WeakMap/WeakSet — временные связи с объектами без риска утечек памяти.

3. Объединения и пересечения​

Объединение типов (|)​

Объединение позволяет значению соответствовать одному из нескольких типов:

type ID = string | number;
type Status = 'loading' | 'success' | 'error';

Пересечение типов (&)​

Пересечение объединяет несколько типов в один:

type A = { a: string };
type B = { b: number };
type C = A & B; // { a: string; b: number }

4. Функции​

Типизация параметров и возврата​

function greet(name: string): string {
return `Hello, ${name}`;
}

Функция может не возвращать значение:

function log(message: string): void {
console.log(message);
}

Необязательные и параметры по умолчанию​

function createUser(name: string, age?: number) { /* ... */ }
function multiply(a: number, b: number = 1) { return a * b; }

Типы функций​

Тип функции описывает сигнатуру:

type BinaryOperation = (x: number, y: number) => number;
const add: BinaryOperation = (a, b) => a + b;

Перегрузка функций​

TypeScript поддерживает перегрузку функций через декларации:

function format(value: string): string;
function format(value: number): string;
function format(value: string | number): string {
return String(value);
}

5. Интерфейсы​

Интерфейсы описывают контракты для объектов, классов и функций.


Базовый интерфейс​

interface Person {
name: string;
age: number;
}

Расширение интерфейсов​

interface Employee extends Person {
department: string;
}

Опциональные и readonly-свойства​

interface Options {
timeout?: number;
readonly retries: number;
}

Индексные сигнатуры​

interface Dictionary {
[key: string]: number;
}

Вызов и конструктор​

interface Callable {
(input: string): boolean;
}

interface Constructable {
new (name: string): Instance;
}

6. Классы​

Базовое объявление​

class Animal {
name: string;
constructor(name: string) {
this.name = name;
}
move() { console.log(`${this.name} moves`); }
}

Модификаторы доступа​

  • public — доступен везде (по умолчанию)
  • private — доступен только внутри класса
  • protected — доступен внутри класса и его потомков

Параметры конструктора​

class Point {
constructor(public x: number, public y: number) {}
}

Абстрактные классы​

abstract class Shape {
abstract getArea(): number;
render() { /* общая логика */ }
}

Статические члены​

class MathUtils {
static PI = 3.14159;
static double(x: number) { return x * 2; }
}

Реализация интерфейсов​

class Bird implements Flyable {
fly() { /* ... */ }
}

7. Утилитарные типы​

TypeScript предоставляет встроенные утилитарные типы для трансформации других типов.


Partial<T>​

Делает все свойства типа T опциональными.

type PartialUser = Partial<User>; // { id?: number; name?: string; ... }

Required<T>​

Делает все свойства обязательными.


Readonly<T>​

Делает все свойства только для чтения.


Record<K, T>​

Создает объектный тип с ключами типа K и значениями типа T.

type StatusCodeMap = Record<number, string>;

Pick<T, K>​

Выбирает подмножество свойств из T по ключам K.

type NameOnly = Pick<User, 'name'>;

Omit<T, K>​

Исключает указанные свойства из типа.

type WithoutId = Omit<User, 'id'>;

Комбо-паттерн: безопасное обновление полей модели​

Omit, keyof и дженерик-функция часто используются вместе, чтобы запретить изменение системных полей и сохранить связь между выбранным ключом и типом значения.

Код ITЗагрузка примера кода…


Exclude<T, U>​

Исключает из T все типы, совместимые с U.

type NonNullable = Exclude<string | null | undefined, null | undefined>;

Extract<T, U>​

Извлекает из T только те типы, которые совместимы с U.


NonNullable<T>​

Удаляет null и undefined из объединения.


ReturnType<T>​

Извлекает тип возвращаемого значения функции.

type R = ReturnType<() => string>; // string

Parameters<T>​

Получает кортеж типов параметров функции.

type P = Parameters<(a: number, b: string) => void>; // [number, string]

ConstructorParameters<T>​

Получает типы параметров конструктора.


InstanceType<T>​

Получает тип экземпляра класса.


ThisType<T>​

Указывает контекст this в объектных литералах.


8. Расширенные возможности типов​

Операторы типов​

ОператорСинтаксисНазначение
Запрос типаtypeof xТип переменной или свойства
Ключиkeyof TUnion всех ключей объекта
ИндексацияT[K]Тип поля K в T
Поиск по unionT[number]Элемент массива/кортежа
Пересечение ключейK & keyof TОграничение ключей
УсловныйT extends U ? X : YВыбор типа по совместимости
Inferinfer RВывод типа внутри conditional
Mapped{ [K in keyof T]: … }Преобразование всех полей
Template literal`prefix-${K}`Строковые шаблоны типов
type User = { id: string; name: string; role: 'admin' | 'user' };
type UserKeys = keyof User; // 'id' | 'name' | 'role'
type UserName = User['name']; // string
type ReadonlyUser = { readonly [K in keyof User]: User[K] };
type RoleKey = `role-${User['role']}`; // 'role-admin' | 'role-user'

Условные типы​

type IsString<T> = T extends string ? true : false;

Распределительные условные типы​

Автоматически применяются к каждому элементу объединения.


Инференс в условных типах​

type ReturnType<T> = T extends (...args: any) => infer R ? R : never;

Mapped Types​

Создание новых типов на основе существующих с преобразованием ключей или значений.

type Nullable<T> = { [P in keyof T]: T[P] | null };

Сопоставленные типы и обобщённая индексация​

Сопоставленные типы (mapped types) проходят по ключам типа и строят новый тип по шаблону. Обобщённая индексация связывает ключ и значение через T[K], где K extends keyof T.

Код ITЗагрузка примера кода…

Здесь тип WebhookHandler<E> гарантирует соответствие между именем события и формой payload. Если обратиться к полю из другого события, компилятор сразу сообщает о проблеме.

Особенности:

  • PayloadMap[E] даёт точный тип нагрузки для выбранного события;
  • одна и та же функция-обработчик масштабируется на десятки событий без any;
  • ошибки в названиях полей и несоответствиях контракта ловятся до запуска.

Template Literal Types​

Позволяют создавать строки на основе шаблонов:

type EventName = `${'click' | 'hover'}-${'button' | 'link'}`;
// 'click-button' | 'click-link' | 'hover-button' | 'hover-link'

Key Remapping​

В mapped types можно переименовывать ключи:

type Getters<T> = {
[K in keyof T as `get${Capitalize<string & K>}`]: () => T[K]
};

9. Модули и пространства имен​

Модули ES​

TypeScript использует стандартные модули ES:

// math.ts
export const PI = 3.14159;
export function add(a: number, b: number) { return a + b; }

// main.ts

import { PI, add } from './math';


Пространства имен​

namespace Utils {
export function log(msg: string) { console.log(msg); }
}

Пространства имён рекомендуются только для глобальных библиотек или legacy-кода. В новых проектах — ES-модули (import/export).


Слияние деклараций (declaration merging)​

interface с одинаковым именем объединяются:

interface Box { width: number; }
interface Box { height: number; }
// Box = { width: number; height: number; }

interface Box { scale(factor: number): void; } // merge с методом

namespace может дополнять class, function, enum:

function buildLabel(name: string): string {
return buildLabel.prefix + name + buildLabel.suffix;
}
namespace buildLabel {
export let prefix = 'Hello, ';
export let suffix = '!';
}

type не сливается — для alias используйте одно объявление.


10. Декларации​

Глобальные декларации​

declare var VERSION: string;
declare function initialize(): void;

Декларации модулей​

declare module 'my-library' {
export function doSomething(): void;
}

Расширение существующих интерфейсов​

interface Window {
myCustomProp: string;
}

Правила .d.ts для сторонних JS-модулей​

ЗадачаПодход
Типы для npm-пакета без .d.ts@types/имя из DefinitelyTyped или свой declare module
UMD / глобальная переменнаяexport as namespace Lib; + declare global
Расширение чужого модуляdeclare module 'lib' { export … } (augmentation)
Только типы, без JS"types" / "typings" в package.json → index.d.ts

Пример augmentation:

// types/express.d.ts

import 'express';

declare module 'express-serve-static-core' {
interface Request {
userId?: string;
}
}

Поля declare не генерируют JS — только проверка типов. interface допускает merge; type и enum — нет.


11. Конфигурация TypeScript (tsconfig.json)​

Полный список опций компилятора:


Основные настройки​

  • target — версия ECMAScript (например, "ES2020", "ES2022")
  • module — система модулей ("commonjs", "es2020", "esnext")
  • lib — библиотеки, включаемые в компиляцию (["DOM", "ES2022"])
  • outDir — директория для скомпилированного JS
  • rootDir — корневая директория исходников
  • declaration — генерировать .d.ts файлы
  • sourceMap — генерировать source maps

Проверка типов​

  • strict — включает все строгие проверки
  • noImplicitAny — запрещает неявный any
  • strictNullChecks — требует явной обработки null/undefined
  • strictFunctionTypes — усиливает проверку типов функций
  • strictBindCallApply — строгая типизация методов bind, call, apply
  • strictPropertyInitialization — требует инициализации всех свойств класса
  • noImplicitThis — запрещает неявный this типа any
  • alwaysStrict — добавляет "use strict" в каждый файл

Флаги безопасности compilerOptions​

Флаг strict: true включает группу проверок ниже. Отдельные флаги можно включать по одному при постепенной миграции legacy-кода.

ФлагЧто проверяетТипичная ошибка без флага
strictNullChecksnull/undefined отдельно от базового типаobj.foo на пустом объекте
noImplicitAnyЗапрет неявного anyПараметр без типа → any
strictFunctionTypesКонтрвариантность параметров функцийНебезопасная передача callback
strictBindCallApplyТипы аргументов у bind/call/applyНеверное число аргументов
strictPropertyInitializationПоля класса инициализированыundefined у readonly поля
noImplicitThisЯвный тип this в функцияхthis как any в callback
useUnknownInCatchVariablescatch (e) имеет тип unknownОбращение к e.message без проверки
noUncheckedIndexedAccessИндекс массива/запись → T | undefinedДоступ [0] без проверки
exactOptionalPropertyTypesundefined ≠ "свойства нет"Лишний ключ со значением undefined
noImplicitReturnsreturn во всех ветках функцииЗабытый return в if
noFallthroughCasesInSwitchЗапрет провала между caseДва case без break
noUnusedLocals / noUnusedParametersМёртвый кодНеиспользуемые переменные

Рекомендуемый минимум для новых проектов:

{
"compilerOptions": {
"strict": true,
"noUncheckedIndexedAccess": true,
"noImplicitReturns": true,
"noFallthroughCasesInSwitch": true
}
}

Полный список — typescriptlang.org/tsconfig.


Модули и разрешение​

  • moduleResolution — стратегия разрешения модулей ("node", "classic")
  • baseUrl — базовый URL для абсолютных импортов
  • paths — маппинг путей
  • resolveJsonModule — разрешить импорт JSON-файлов
  • esModuleInterop — улучшает совместимость с CommonJS

JSX​

  • jsx — режим обработки JSX ("preserve", "react", "react-jsx")
  • jsxFactory — функция для создания элементов (по умолчанию React.createElement)
  • jsxFragmentFactory — фабрика для фрагментов

Экспериментальные возможности​

  • experimentalDecorators — поддержка декораторов
  • emitDecoratorMetadata — генерация метаданных для декораторов

Отладка и производительность​

  • incremental — инкрементальная сборка
  • tsBuildInfoFile — файл для хранения информации о сборке
  • composite — поддержка проектных ссылок

Project references (монорепозиторий)​

Включите в базовом tsconfig:

{
"compilerOptions": {
"composite": true,
"declaration": true,
"declarationMap": true,
"incremental": true
}
}

В зависимом пакете:

{
"references": [{ "path": "../shared" }]
}

Команды:

КомандаДействие
tsc -bСборка всего графа references
tsc -b --cleanОчистка артефактов
tsc -b -wWatch-режим для monorepo

Учебный разбор — 30.md § Monorepo.


Запреты и предупреждения​

  • noUnusedLocals — предупреждать о неиспользуемых локальных переменных
  • noUnusedParameters — предупреждать о неиспользуемых параметрах
  • noImplicitReturns — требовать явный return во всех ветках
  • noFallthroughCasesInSwitch — запрет провалов в switch
  • allowUnreachableCode — разрешить недостижимый код
  • exactOptionalPropertyTypes — различать undefined и отсутствие свойства

12. Декораторы​

Декораторы — экспериментальная возможность, позволяющая добавлять метаданные и изменять поведение классов, методов, свойств и параметров.


Включение декораторов​

В tsconfig.json требуется:

{
"compilerOptions": {
"experimentalDecorators": true,
"emitDecoratorMetadata": true
}
}

Типы декораторов​

  • Классовые декораторы:
function sealed(constructor: Function) {
Object.seal(constructor);
Object.seal(constructor.prototype);
}

@sealed
class Greeter { /* ... */ }
  • Метод-декораторы:
function readonly(target: any, propertyKey: string, descriptor: PropertyDescriptor) {
descriptor.writable = false;
}

class Math {
@readonly
double(x: number) { return x * 2; }
}
  • Свойства-декораторы:
function format(template: string) {
return function (target: any, propertyKey: string) {
// можно сохранить метаданные через Reflect
};
}

class User {
@format("Hello, %s")
name: string;
}
  • Параметр-декораторы:
function logParameter(target: any, methodName: string, paramIndex: number) {
// логика регистрации параметра
}

class Greeter {
greet(@logParameter name: string) { /* ... */ }
}

Метаданные​

С включённой опцией emitDecoratorMetadata, TypeScript генерирует типы параметров и возвращаемых значений как метаданные, доступные через Reflect.getMetadata.


13. Работа с DOM и окружением​

Глобальные типы​

TypeScript автоматически подключает типы для DOM, если в lib указано "DOM".

Пример:

const button = document.getElementById('submit') as HTMLButtonElement;
button.addEventListener('click', () => { /* ... */ });

Определение глобальных переменных​

// global.d.ts
interface Window {
__APP_VERSION__: string;
}

Теперь window.__APP_VERSION__ доступен без ошибок.


Работа с событиями​

document.addEventListener('keydown', (event: KeyboardEvent) => {
if (event.key === 'Enter') { /* ... */ }
});

14. Интеграция с фреймворками​

React​

  • Используются файлы .tsx
  • Компоненты типизируются через React.FC<Props>
  • Хуки (useState, useEffect) выводят типы автоматически
  • Пропсы описываются интерфейсами или типами
interface ButtonProps {
label: string;
onClick: () => void;
}

const Button: React.FC<ButtonProps> = ({ label, onClick }) => (
<button onClick={onClick}>{label}</button>
);

Vue.js​

  • Поддержка через defineComponent
  • Пропсы описываются в props с указанием типа
  • Композиционный API использует ref, computed с выводом типов

import { defineComponent, PropType } from 'vue';

export default defineComponent({
props: {
title: { type: String as PropType<string>, required: true }
},
setup(props) {
// props.title — string
}
});

Angular​

  • Полная поддержка TypeScript "из коробки"
  • Декораторы @Component, @Injectable используют метаданные
  • Типизация шаблонов через строгую проверку

Node.js​

  • Устанавливается пакет @types/node
  • Глобальные объекты — process, global, Buffer
  • Модули CommonJS и ES совместимы при правильной настройке

import * as fs from 'fs';

fs.readFile('file.txt', 'utf8', (err, data) => { /* ... */ });

15. Распространённые паттерны​

Защита от null/undefined (Defensive Programming)​

function processUser(user: User | null) {
if (!user) return;
// user теперь User
}

Discriminated Unions​

type Success = { status: 'success'; data: string };
type Failure = { status: 'error'; message: string };
type Result = Success | Failure;

function handle(result: Result) {
if (result.status === 'success') {
// result.data доступен
}
}

Тотальность (exhaustive check)​

Проверка полноты охвата union через never в default:

Код ITЗагрузка примера кода…

Новый вариант в Action без ветки в switch → ошибка компиляции на _check.


Option и Result​

Код ITЗагрузка примера кода…

ПаттернКогда использовать
T | nullПростые API, один "пустой" исход
Option<T>Явное "значения нет" без исключения
Result<T, E>Нужен код/тип ошибки в контракте
throwНевосстановимые сбои инфраструктуры

Учебный разбор — 30.md § Обработка ошибок.


Type Guards​

function isString(value: unknown): value is string {
return typeof value === 'string';
}

if (isString(input)) {
// input — string
}

Branding Types (Nominal Typing Emulation)​

type UserID = string & { readonly brand: unique symbol };
const createUserID = (id: string): UserID => id as UserID;

Immutability​

Использование Readonly<T>, readonly массивов и spread-операторов:

const newState = { ...state, count: state.count + 1 };

16. Лучшие практики​

  • Всегда включайте strict: true
  • Избегайте any; используйте unknown при работе с внешними данными
  • Предпочитайте interface для публичных API, type — для утилит и union-типов
  • Используйте утилитарные типы вместо ручного копирования структур
  • Пишите тесты с учётом типов (Jest + ts-jest)
  • Разделяйте бизнес-логику и типы от инфраструктурного кода
  • Не используйте as без необходимости; предпочитайте проверки типов

17. Инструменты и CLI​

Компилятор tsc​

Основные команды:

  • tsc --init — создаёт tsconfig.json
  • tsc --watch — отслеживает изменения и перекомпилирует
  • tsc --noEmit — только проверка типов, без генерации JS
  • tsc file.ts — компиляция одного файла

Примечание по развитию экосистемы: для ветки TypeScript 7.x анонсирован нативный компилятор на Go. Для больших проектов это важно из-за лучшего использования многоядерных CPU и ускорения тип-проверки/сборки. При внедрении в проде ориентируйтесь на официальные release notes и совместимость вашего toolchain.


ESLint + TypeScript​

  • Используется @typescript-eslint/parser
  • Правила — no-explicit-any, strict-boolean-expressions, prefer-readonly

Prettier​

Форматирование кода с поддержкой TypeScript и JSX.


TypeScript Playground​

Онлайн-редактор на typescriptlang.org/play


18. Расширение TypeScript​

AST и трансформеры​

TypeScript предоставляет API для анализа и модификации Abstract Syntax Tree.

Пример использования:


import * as ts from 'typescript';

const source = ts.createSourceFile('test.ts', 'const x = 1;', ts.ScriptTarget.Latest);

Это используется в:

  • Кастомных линтерах
  • Кодогенераторах
  • Babel-плагинах с поддержкой TS
  • Framework-specific компиляторах (например, Angular)

Language Service API​

Позволяет создавать IDE-функции — автодополнение, навигацию, рефакторинг.


19. Полное API: Основы​

Введение в TypeScript​

TypeScript — надмножество JavaScript со статической типизацией: вы пишете JS-подобный код, а проверка типов происходит до запуска.

Компиляция​

tsc преобразует .ts/.tsx в JavaScript и проверяет контракты типов.

Типы данных​

База — string, number, boolean, bigint, symbol, null, undefined, object, а также unknown, never, void.

Изменение значений​

Тип переменной фиксируется выводом типа/аннотацией; значение можно менять только в пределах совместимого типа.

Операции​

Операции над данными проверяются типами: например, нельзя вызывать строковые методы на number.

Массивы​

Типизация массивов: T[] или Array<T>.

Объекты​

Объекты описываются через type/interface, что фиксирует форму данных.

Контроль типа переменной в объекте​

Через narrowing (typeof, in, instanceof) TypeScript сужает типы в ветках.

Контроль структуры объекта​

Проверка обязательных/опциональных полей и readonly-контрактов.

Контроль типов значений объекта​

Каждое поле имеет свой тип; неправильные присваивания блокируются компилятором.

Цикл for​

Обычный индексный цикл подходит для массивов и диапазонов.

Цикл for-of​

Итерация по значениям (Array, Set, Map.keys()/values() и т.д.).

Цикл for-in​

Итерация по ключам объекта; часто сочетается с keyof.

Функции​

Параметры и return-тип аннотируются явно или выводятся автоматически.

Пустой результат функции​

void означает "ничего полезного не возвращается".

Тип any​

any отключает проверку типов; использовать только как временный компромисс.

Тип any в массивах​

any[] убирает безопасность по всем элементам массива; лучше unknown[] + проверки.

Объединение типов​

A | B позволяет переменной принимать одно из нескольких значений/типов.

Псевдонимы типов​

type Name = ... даёт читаемые и переиспользуемые контракты.

Тип строкового литерала​

Ограничение значения конкретными строками: 'draft' | 'active'.

Псевдонимы для объединения строк​

Комбинация type + string union для безопасных статусов, ролей, событий.


20. Полное API: Кортежи​

Введение в кортежи​

Кортеж — фиксированная последовательность с типом на каждой позиции.

Изменение кортежа​

Изменять можно только значения, совместимые с типом позиции.

Кортеж для чтения​

readonly [A, B] запрещает мутации.

Необязательные элементы кортежей​

[A, B?] описывает опциональные позиции.

Деструктуризация кортежа​

const [x, y] = tuple сохраняет типы элементов.

Заполнение кортежа​

При инициализации важны порядок и длина; иначе ошибка проверки.


21. Полное API: Перечисления​

Введение в перечисления​

enum задаёт именованный набор констант.

Получение по ключу​

Доступ к значению: EnumName.Member.

Получение по значению​

Для numeric enum доступно обратное отображение.

Перечисление как тип​

Поле можно ограничить конкретным enum.

Явные ключи​

Каждому элементу задаётся конкретное значение вручную.

Упрощенные ключи​

Numeric enum умеет автоинкремент.

Строковые перечисления​

String enum удобен для API-контрактов и логов.


22. Полное API: Встроенные типы и структуры​

Введение в встроенные типы​

TypeScript использует стандартные JS-объекты и их typed-API.

Дата​

Date типизируется из коробки (toISOString, getTime и т.д.).

Регулярки​

RegExp и методы строк поддерживают строгую типизацию аргументов.

Тип HTMLElement​

Для DOM есть точные типы — HTMLElement, HTMLInputElement, Event.

Коллекции​

Map<K,V>, Set<T>, WeakMap, WeakSet типизируются дженериками.

Структура объекта​

Объект проектируется как контракт с явными полями.

Необязательные свойства объекта​

field?: T разрешает отсутствие свойства.

Интерфейсы (в разработке)​

interface удобен для публичных API и расширяемых контрактов.

Массивы в объектах​

Поля-коллекции описываются как items: Item[].

Интерфейс как тип объекта с массивом​

Интерфейс легко описывает вложенные массивы и связи сущностей.

Сложные объекты​

Составные структуры собираются через nested-типы и utility-типы.

Объекты в объектах​

Вложенность моделируется через отдельные интерфейсы/алиасы.

Массивы объектов​

Array<Entity> — основной паттерн для списков данных из API.


23. Полное API: Функции​

Количество параметров​

Сигнатура функции строго фиксирует число и типы аргументов.

Необязательные параметры​

param?: T делает аргумент необязательным.

Значения параметров по умолчанию​

(x = 1) задаёт default и помогает выводу типа.

Rest параметры​

(...args: T[]) собирает произвольное число однотипных аргументов.

Тип функций​

Тип функции задаётся как (a: A) => B.

Свой тип с функцией​

Часто делают alias: type Handler = (e: Event) => void.

Функции-коллбэки (задачи)​

Callback-типы обеспечивают безопасную передачу логики между модулями.

Стрелочные функции​

Arrow functions краткие и хорошо выводятся по контексту.


24. Мини-шпаргалка по теме "полное API"​

Код ITЗагрузка примера кода…

Этот блок покрывает ключевые элементы из вашего списка:

  • литеральные union-типы;
  • readonly-кортеж;
  • интерфейс с необязательным полем;
  • enum;
  • типизированную функцию с rest-параметрами.

В подборках​

Статья входит в тематические подборки и блок "С чего начать?" на главной. Соседние шаги того же маршрута:

Справочники — Справочник по Angular, Справочник по Ext JS, Справочник по Vue.js, Справочник по Django, Справочник по React, Справочник по модулю Turtle.