Какие типы данных поддерживаются в TypeScript
Разбор вопроса «Какие типы данных поддерживаются в TypeScript» для Frontend Developer: что проверяет интервьюер, ключевые тезисы, практические примеры и частые ошибки.
Вопрос
Какие типы данных поддерживаются в TypeScript
Профессия
Frontend Developer
Что хочет услышать интервьюер
Интервьюер хочет убедиться, что кандидат понимает типизацию в TypeScript, знает как базовые, так и специфические типы, и может объяснить их применение в реальных проектах.
Ключевые тезисы
- TypeScript включает все базовые типы JavaScript: number, string, boolean, null, undefined, object, symbol, bigint.
- Дополнительно TypeScript поддерживает специальные типы: any, unknown, void, never, tuple, enum.
- TypeScript позволяет создавать пользовательские типы через интерфейсы (interface) и псевдонимы типов (type alias).
- Поддерживаются сложные типы, такие как массивы (Array<T>), функции (Function), и дженерики (Generics).
- TypeScript поддерживает объединение типов (union types) и пересечение типов (intersection types).
Подробный ответ
TypeScript расширяет возможности JavaScript, добавляя статическую типизацию. Помимо базовых типов JavaScript (number, string, boolean, null, undefined, object, symbol, bigint), TypeScript предлагает дополнительные типы, такие как any, unknown, void, never, tuple, enum. any позволяет переменной быть любого типа, отключая проверку типов, тогда как unknown требует явного приведения типа перед использованием. void указывает на отсутствие возвращаемого значения, а never означает, что функция никогда не завершится (например, выбрасывает исключение). Tuple позволяет фиксировать типы элементов массива по позициям, а enum создает набор именованных констант. TypeScript также поддерживает сложные типы: массивы (Array<T>), функции (Function), дженерики (Generics), объединение (union) и пересечение (intersection) типов. Пользовательские типы можно создавать через интерфейсы (interface) и псевдонимы типов (type alias).
Практические примеры
Пример 1
Пример использования union types и intersection types:
type Dog = { bark: () => void };
type Robot = { drive: () => void };
// Union type: может быть либо Dog, либо Robot
type Pet = Dog | Robot;
// Intersection type: должен иметь и bark, и drive
type RobotDog = Dog & Robot;
const myPet: Pet = { bark: () => console.log('Woof!') };
const myRobotDog: RobotDog = {
bark: () => console.log('Woof!'),
drive: () => console.log('Driving...')
};Пример 2
Пример использования never:
function throwError(message: string): never {
throw new Error(message);
}
function infiniteLoop(): never {
while (true) {}
}Пример 3
Пример использования enum и tuple:
enum Direction {
Up = 'UP',
Down = 'DOWN',
Left = 'LEFT',
Right = 'RIGHT'
}
let move: [Direction, number] = [Direction.Up, 10];Частые ошибки
- Использование any вместо unknown, что может привести к ошибкам во время выполнения из-за отсутствия проверки типов.
- Путаница между interface и type alias. Хотя они часто взаимозаменяемы, interface лучше подходит для объявления форм объектов и может быть расширен, тогда как type alias более гибок для сложных типов.
Связанные темы
- Дженерики (Generics) в TypeScript
- Интерфейсы (Interfaces) и их расширение
- Продвинутые типы: mapped types, conditional types
Follow-up вопросы
В чем разница между типами any и unknown?
Уровень: intermediate
any отключает проверку типов, позволяя присваивать любое значение без ошибок. unknown требует явной проверки типа перед использованием, что делает его более безопасным.
Как работают union types и intersection types? Приведите примеры.
Уровень: intermediate
Union types (A | B) позволяют переменной быть одного из нескольких типов. Intersection types (A & B) объединяют свойства нескольких типов в один. Пример: type Result = string | number (union) или type User = {name: string} & {age: number} (intersection).
Когда стоит использовать interface, а когда type alias?
Уровень: advanced
interface лучше для объявления форм объектов и поддерживает расширение через extends. type alias более гибок и подходит для сложных типов, включая union/intersection. Обычно interface используют для публичного API, type — для внутренней логики.
Что делает тип never и где он применяется?
Уровень: advanced
never означает значение, которое никогда не возникает. Используется в функциях, которые всегда выбрасывают ошибку (throw) или в бесконечных циклах, а также для исключения вариантов в условных типах.
Как TypeScript обрабатывает типы null и undefined?
Уровень: basic
По умолчанию null и undefined совместимы со всеми типами (как в JavaScript). Но с опцией strictNullChecks они становятся отдельными типами, и требуется явная проверка или указание через union (string | null).
Какие преимущества PropTypes перед TypeScript
Разбор вопроса «Какие преимущества PropTypes перед TypeScript» для Frontend Developer: что проверяет интервьюер, ключевые тезисы, практические примеры и частые ошибки.
Какой опыт использования TypeScript
Разбор вопроса «Какой опыт использования TypeScript» для Frontend Developer: что проверяет интервьюер, ключевые тезисы, практические примеры и частые ошибки.