Ответ
instanceof в TypeScript — это оператор, проверяющий, является ли объект экземпляром определенного класса или конструктора. Он работает с прототипной цепочкой объекта.
class Animal {}
class Dog extends Animal {}
const dog = new Dog();
console.log(dog instanceof Dog); // true
console.log(dog instanceof Animal); // true (наследование)
console.log(dog instanceof Object); // true (все объекты наследуют от Object)
Особенности:
- Работает только с классами и функциями-конструкторами
- Не работает с интерфейсами TypeScript (они существуют только на этапе компиляции)
- Может давать ложные результаты при работе с
Symbol.hasInstanceили между разными фреймами/окнами браузера
Ответ 18+ 🔞
Ну ты смотри, какой придурок этот instanceof в TypeScript, блядь! Вроде умный такой оператор, а на деле — просто проверяет, не наследуется ли твой объект от какого-то класса, по цепочке прототипов шастает, сука.
Вот смотри, как это выглядит, ёпта:
class Animal {}
class Dog extends Animal {}
const dog = new Dog();
console.log(dog instanceof Dog); // true, ну логично, пёс — он и есть пёс
console.log(dog instanceof Animal); // true, потому что собака — это животное, блядь, наследование же!
console.log(dog instanceof Object); // true, а это вообще все объекты наследуют, ядрёна вошь!
Но вот что тебе важно понять, чтобы потом не охуеть:
- Работает он только с классами или старыми добрыми функциями-конструкторами. С интерфейсами TypeScript — нихуя! Они же только на этапе компиляции существуют, а в рантайме их след простыл.
- Может тебя и обмануть, сука! Если кто-то накостылял с
Symbol.hasInstanceили если объекты из разных окон браузера — тут уже доверия ебать ноль, может наврать с три короба.
Короче, инструмент полезный, но с подвохом, как хитрая жопа. Используй, но головой думай, э бошка!