Найти в Дзене
Lyakhov Eugene

Теоретические задачи TypeScript

1. Что такое TypeScript и в чем его основные отличия от JavaScript? TypeScript — это строго типизированный надмножество JavaScript (статистически типизированный суперсет), разработанное Microsoft. Он компилируется в чистый JS и добавляет статическую типизацию, интерфейсы, дженерики, декораторы и современные возможности ECMAScript. Главное отличие — наличие системы типов, которая работает на этапе компиляции, а не в рантайме . 2. Какие встроенные типы данных существуют в TypeScript? Основные: number, string, boolean, array, tuple, enum, any, unknown, void, null, undefined, never. Для массивов используются два синтаксиса: number[] или Array<number> . 3. В чем разница между any и unknown? any полностью отключает проверку типов — переменной можно присвоить что угодно и делать с ней что угодно. unknown тоже принимает любые значения, но перед использованием требует проверки типа (type guard). unknown — типобезопасная альтернатива any . 4. Что такое интерфейс (interface) и чем он отличается
Оглавление

Базовый уровень (1–10)

1. Что такое TypeScript и в чем его основные отличия от JavaScript?

TypeScript — это строго типизированный надмножество JavaScript (статистически типизированный суперсет), разработанное Microsoft. Он компилируется в чистый JS и добавляет статическую типизацию, интерфейсы, дженерики, декораторы и современные возможности ECMAScript. Главное отличие — наличие системы типов, которая работает на этапе компиляции, а не в рантайме .

2. Какие встроенные типы данных существуют в TypeScript?

Основные: number, string, boolean, array, tuple, enum, any, unknown, void, null, undefined, never. Для массивов используются два синтаксиса: number[] или Array<number> .

3. В чем разница между any и unknown?

any полностью отключает проверку типов — переменной можно присвоить что угодно и делать с ней что угодно. unknown тоже принимает любые значения, но перед использованием требует проверки типа (type guard). unknown — типобезопасная альтернатива any .

4. Что такое интерфейс (interface) и чем он отличается от type alias?

Интерфейс описывает структуру объекта и поддерживает declaration merging (возможность повторно объявить интерфейс с тем же именем, дополняя его). type более универсален: может описывать примитивы, union и кортежи, но не подлежит слиянию. Для объектов часто выбирают интерфейс, для сложных композиций — type .

5. Что такое Union Types и Type Guards?

Union (|) позволяет переменной принимать несколько типов: string | number. Type Guard — это механизм (обычно typeof, instanceof или пользовательская функция с pet is Fish) для сужения типа до конкретного варианта внутри условного блока .

6. Как объявить массив с фиксированным количеством элементов разного типа?

Через кортежи (Tuples): let user: [string, number] = ["Анна", 25]. TypeScript проверяет не только типы, но и порядок элементов .

7. Для чего нужен файл tsconfig.json?

Корневой конфигурационный файл TypeScript. Указывает компилятору (tsc), какие файлы компилировать, в какую версию JS транспилировать (target), куда складывать результат (outDir) и включает строгие режимы проверки (strict). Без него TS работает с настройками по умолчанию .

8. Что такое void и never? В чем разница?

void — функция завершилась без возврата значения (вернула undefined). never — функция никогда не завершается (бросает исключение или бесконечный цикл). never — это подтип, который не содержит значений .

9. Как сделать свойство интерфейса необязательным?

Поставить ? после имени: age?: number. Это позволяет не указывать поле при создании объекта .

10. Что такое type inference (вывод типов)?

TypeScript автоматически определяет тип переменной на основе присвоенного значения. Если написать let count = 5, TS сам поймет, что count — number. Не нужно аннотировать очевидное .

Средний уровень (11–20)

11. Что такое дженерики (Generics) и зачем они нужны?

Позволяют создавать компоненты, работающие с любыми типами, но сохраняя информацию о типе. Пример: function identity<T>(arg: T): T { return arg; }. Дженерики обеспечивают переиспользование без потери типобезопасности .

12. Какие модификаторы доступа есть в классах TypeScript?

public (по умолчанию) — доступ отовсюду. private — только внутри класса. protected — внутри класса и в подклассах. readonly — только для чтения, задать значение можно в момент объявления или в конструкторе .

13. В чем разница между extends и implements?

extends — наследование класса или интерфейса (получение реализации/контракта). implements — класс обязуется выполнить контракт интерфейса, но не наследует реализацию .

14. Как вызвать конструктор родительского класса из дочернего?

Через super(). В производном классе обязательно вызвать super() до обращения к this. Через super также можно вызывать методы родителя .

15. Что такое Declaration Merging?

Способность TypeScript объединять несколько объявлений с одним именем. Чаще всего работает с интерфейсами — можно определить interface User в двух местах, они сольются в один .

16. Что такое enum и когда его использовать?

Enum (перечисление) — набор именованных констант. Удобен для конечного списка значений (статусы заказа, роли, дни недели). Может быть числовым или строковым .

17. Чем interface отличается от class?

Интерфейс существует только на этапе разработки, в коде его нет — это описание структуры. Класс — это реализация, которая попадает в финальный JS и может создавать экземпляры .

18. Что такое Type Assertion (утверждение типа)?

Способ сказать компилятору: «Я знаю тип лучше, доверься мне». Два синтаксиса: angle-bracket (<string>value) и as (value as string). В JSX допустим только as. Не меняет рантайм, только для проверок .

19. Как сделать все свойства интерфейса опциональными/только для чтения?

Использовать встроенные утилиты: Partial<Type> (все опционально), Readonly<Type> (все только для чтения). Required<Type> — обратная операция .

20. Что такое Mapped Types?

Позволяют создавать новые типы на основе существующих, трансформируя их свойства. Пример: type Readonly<T> = { readonly [P in keyof T]: T[P] }. В связке с keyof и in дает мощную систему композиции типов .

Продвинутый уровень (21–25)

21. Что такое условные типы (Conditional Types)?

Типы, которые выбирают одно из двух возможных значений в зависимости от условия: T extends U ? X : Y. Позволяют выражать нетривиальные сценарии, например, NonNullable<T> или создавать цепочки как в Flatten. На их основе работают Exclude, Extract, ReturnType .

22. Что такое Discriminated Unions (размеченные объединения)?

Паттерн, когда несколько типов объединены общим полем-дискриминатором (литеральным типом). Это позволяет TypeScript автоматически сужать тип в switch или if. Например, общее поле kind: 'circle' | 'square' .

23. Что такое декораторы (Decorators) и где применяются?

Экспериментальная возможность (активно в Angular/NestJS) — функции, которые позволяют аннотировать и модифицировать классы, методы, свойства и параметры. Выглядят как @Component или @Injectable. Требуют включения experimentalDecorators в tsconfig .

24. Что такое .d.ts файлы?

Файлы деклараций, содержащие только описания типов (без реализации). Нужны для использования в TypeScript обычных JS-библиотек или для выноса типов отдельно. Например, @types/node — это набор .d.ts .

25. Что такое ключевое слово infer?

Используется внутри условных типов, чтобы «извлечь» тип из другого типа. Например, ReturnType<T> использует infer R для захвата возвращаемого типа функции. Это уровень продвинутой типизации, необходимый для написания сложных утилит .

Страховка на собеседовании

Знание есть, но стресс мешает?
Бесплатное сообщество для прокачки карьеры в IT

Подпишись на https://t.me/IT_Interview_Partner_Bot

Подпишись на
https://t.me/LyakhovEugene