Стандартная библиотека TypeScript: полный обзор
TypeScript — это строго типизированное надмножество JavaScript, которое добавляет статическую типизацию и мощные инструменты для разработки крупных приложений. В отличие от многих языков, TypeScript не имеет обширной встроенной стандартной библиотеки в классическом понимании (как, например, Java или Python). Вместо этого он предоставляет набор встроенных типов, утилит для работы с типами, декораторов и инструментов компилятора. В этой статье мы подробно разберём все ключевые компоненты стандартной библиотеки TypeScript.
1. Встроенные типы данных
TypeScript включает все примитивные типы JavaScript и добавляет свои собственные:
boolean— логический типnumber— числа (целые и с плавающей точкой)string— строкиnullиundefined— специальные значенияsymbol— уникальные идентификаторыbigint— большие целые числаany— отключение проверки типовunknown— безопасная альтернатива anynever— тип для функций, которые никогда не завершаютсяvoid— отсутствие возвращаемого значения
Пример использования встроенных типов:
let isDone: boolean = false;
let decimal: number = 42;
let color: string = "синий";
let notSure: unknown = 4;
notSure = "теперь строка"; // допустимо
function error(message: string): never {
throw new Error(message);
}
2. Утилитарные типы (Utility Types)
TypeScript предоставляет мощные встроенные утилиты для трансформации типов. Вот самые полезные из них:
- Partial<T> — делает все поля типа T необязательными
- Required<T> — делает все поля обязательными
- Readonly<T> — делает все поля только для чтения
- Pick<T, K> — выбирает указанные ключи из типа
- Omit<T, K> — исключает указанные ключи
- Record<K, T> — создаёт тип объекта с ключами K и значениями T
- Exclude<T, U> — исключает типы, присутствующие в U
- ReturnType<T> — извлекает тип возвращаемого значения функции
Пример использования утилитарных типов:
interface User {
id: number;
name: string;
email: string;
}
// Частичное обновление пользователя
function updateUser(id: number, changes: Partial<User>): void {
// Логика обновления
}
// Только для чтения
const readonlyUser: Readonly<User> = {
id: 1,
name: "Иван",
email: "ivan@example.com"
};
// Выбор полей
type UserName = Pick<User, "name" | "email">;
3. Декораторы
Декораторы — это специальные объявления, которые позволяют модифицировать классы, методы, свойства и параметры. TypeScript поддерживает несколько типов декораторов:
- Декораторы классов — применяются к конструктору класса
- Декораторы методов — применяются к методам класса
- Декораторы свойств — применяются к свойствам
- Декораторы параметров — применяются к параметрам методов
Пример декоратора метода для логирования:
function log(target: any, propertyKey: string, descriptor: PropertyDescriptor) {
const originalMethod = descriptor.value;
descriptor.value = function (...args: any[]) {
console.log(`Вызов ${propertyKey} с аргументами: ${JSON.stringify(args)}`);
return originalMethod.apply(this, args);
};
}
class Calculator {
@log
add(a: number, b: number): number {
return a + b;
}
}
const calc = new Calculator();
calc.add(2, 3); // Логирует: Вызов add с аргументами: [2,3]
4. Работа с массивами и коллекциями
TypeScript расширяет стандартные методы JavaScript для массивов, добавляя строгую типизацию:
const numbers: number[] = [1, 2, 3, 4, 5];
// Типизированные методы
const doubled: number[] = numbers.map(n => n * 2);
const even: