> Почему проверка типа через instanceof не работает с интерфейсами в TypeScript (TypeScript)

Уровень: senior · Роль: frontend · Категория: Технические вопросы

Компании: Точка

Стек: TypeScript

> Пример ответа

instanceof в TypeScript работает только с классами, потому что он проверяет цепочку прототипов объекта во время выполнения (runtime). Интерфейсы же - это исключительно конструкция TypeScript, которая существует только на этапе компиляции и полностью стирается при транспиляции в JavaScript. В рантайме от интерфейса не остаётся никакого кода, поэтому instanceof не может ничего проверить.

Например, если написать obj instanceof MyInterface, TypeScript выдаст ошибку: 'MyInterface' only refers to a type, but is being used as a value here. Чтобы проверить соответствие интерфейсу, используют пользовательские защитники типов (type guards), например:

TYPESCRIPT
interface User {
name: string;
age: number;
}
function isUser(obj: any): obj is User {
return typeof obj.name === 'string' && typeof obj.age === 'number';
}

Или применяют дескриминантные объединения (discriminated unions) с общим полем-дискриминатором.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью