Стандартная библиотека 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:
Также в библиотеке
Рекомендаций