Стандартная библиотека TypeScript: полный обзор

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Стандартная библиотека TypeScript: полный обзор

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

Что такое стандартная библиотека TypeScript?

Стандартная библиотека TypeScript — это набор встроенных типов, интерфейсов и утилит, которые поставляются вместе с компилятором. Она включает:

  • Базовые типы (string, number, boolean, any, unknown, never, void).
  • Утилитарные типы (Partial, Required, Pick, Omit, Record и другие).
  • Декораторы (экспериментальная фича для метапрограммирования).
  • Пространства имён (namespace) и модули.
  • Расширенные типы (Promise, Map, Set, WeakMap, WeakSet).
  • Типы для работы с DOM (включаются через lib: ["dom"]).

Утилитарные типы: сердце библиотеки

Утилитарные типы позволяют трансформировать существующие типы без дублирования кода. Рассмотрим самые популярные:

Partial и Required

interface User {
  id: number;
  name: string;
  email: string;
}

// Все поля становятся необязательными
type PartialUser = Partial<User>;

// Все поля становятся обязательными (если были опциональными)
type RequiredUser = Required<PartialUser>;

Pick и Omit

interface Product {
  id: number;
  title: string;
  price: number;
  description: string;
}

// Выбираем только нужные поля
type ProductPreview = Pick<Product, 'id' | 'title'>;

// Исключаем ненужные поля
type ProductWithoutDesc = Omit<Product, 'description'>;

Record и Readonly

// Создаёт объект с определёнными ключами и значениями
type UserRoles = Record<'admin' | 'user' | 'guest', string>;

// Делает все поля только для чтения
type ReadonlyUser = Readonly<User>;

Работа с Promise и асинхронностью

TypeScript предоставляет встроенные типы для работы с асинхронным кодом:

async function fetchData(): Promise<string> {
  return "данные загружены";
}

// Тип для результата Promise
type DataType = Awaited<ReturnType<typeof fetchData>>; // string

Декораторы: метапрограммирование в TypeScript

Декораторы — это специальные объявления, которые позволяют аннотировать и изменять классы, методы, свойства и параметры. Они активно используются в фреймворках (Angular, NestJS).

Пример декоратора класса

function sealed(constructor: Function) {
  Object.seal(constructor);
  Object.seal(constructor.prototype);
}

@sealed
class Calculator {
  add(a: number, b: number): number {
    return a + b;
  }
}

Пример декоратора метода

function log(target: any, key: string, descriptor: PropertyDescriptor) {
  const original = descriptor.value;
  descriptor.value = function (...args: any[]) {
    console.log(`Вызван метод ${key} с аргументами: ${args}`);
    return original.apply(this, args);
  };
  return descriptor;
}

class UserService {
  @log
  getUser(id: number): string {
    return `User ${id}`;
  }
}

Пространства имён (Namespaces)

Пространства имён помогают организовать код и избежать конфликтов имён. Они особенно полезны в больших проектах без модульной системы.

namespace Validation {
  export interface StringValidator {
    isValid(s: string): boolean;
  }

  export class LettersOnlyValidator implements StringValidator {
    isValid(s: string): boolean {
      return /^[A-Za-z]+$/.test(s);
    }
  }
}

// Использование
const validator = new Validation.LettersOnlyValidator();
console.log(validator.isValid("Hello")); // true

Встроенные типы для коллекций

TypeScript включает типизированные версии стандартных коллекций JavaScript:


                
    
    

Рекомендаций