TypeScript instanceof narrowing Type
Last Updated :
28 Apr, 2025
TypeScript instanceof operator is used for type narrowing, allowing us to check whether an object is an instance of a specific class or constructor function. When we use instanceof in a conditional statement, TypeScript narrows the type of a variable based on the result of the check.
Syntax:
if (objectToCheck instanceof ConstructorFunction) {
// Code block to execute if 'objectToCheck' is an instance of 'ConstructorFunction'
}
Where:
- objectToCheck is the object you want to check if it's an instance of a specific class or constructor function.
- ConstructorFunction: This is the constructor function or class constructor that you want to check against. If objectToCheck is an instance of ConstructorFunction, the condition will be true, and TypeScript will narrow the type of objectToCheck accordingly.
- instanceof is a keyword used for type narrowing, allowing you to check whether an object is an instance of a specific class or constructor function.
Example 1: In this example, We have two classes, Car and Bicycle, each with its own methods (start and pedal).The startVehicle function takes a parameter called vehicle, which can be either a Car or a Bicycle. Inside the function, we use instanceof to check the type of vehicle. If the vehicle is an instance of a Car, it narrows the type to Car, allowing us to call the start method. If the vehicle is an instance of a Bicycle, it narrows the type to Bicycle, allowing us to call the pedal method.
JavaScript
class Car {
start() {
console.log("Car started");
}
}
class Bicycle {
pedal() {
console.log("Bicycle pedaling");
}
}
function startVehicle(vehicle: Car | Bicycle) {
if (vehicle instanceof Car) {
// Inside this block, 'vehicle'
// is narrowed to type 'Car'
vehicle.start();
} else {
// Inside this block, 'vehicle' is
// narrowed to type 'Bicycle'
vehicle.pedal();
}
}
const myCar = new Car();
const myBicycle = new Bicycle();
startVehicle(myCar);
startVehicle(myBicycle);
Output:

Example 2: In this example,We have a hierarchy of classes: Animal, Dog, and Cat. The animalSound function takes an Animal as its argument. Inside the function, we use instanceof to check whether the animal is an instance of Dog or Cat.If it's a Dog, the type of animal is narrowed to Dog, and we can call speak on it to bark.If it's a Cat, the type of animal is narrowed to Cat, and we can call speak on it to meow.Otherwise, if it's not a Dog or Cat, it remains of type Animal, and we call the generic speak method.
JavaScript
class Animal {
speak() {
console.log("Animal makes a sound");
}
}
class Dog extends Animal {
speak() {
console.log("Dog barks");
}
}
class Cat extends Animal {
speak() {
console.log("Cat meows");
}
}
function animalSound(animal: Animal) {
if (animal instanceof Dog) {
// Inside this block, 'animal'
// is narrowed to type 'Dog'
animal.speak(); // Calls Dog's speak method
} else if (animal instanceof Cat) {
// Inside this block, 'animal'
// is narrowed to type 'Cat'
animal.speak(); // Calls Cat's speak method
} else {
// Inside this block, 'animal'
// is still of type 'Animal'
animal.speak(); // Calls Animal's speak method
}
}
const dog = new Dog();
const cat = new Cat();
const genericAnimal = new Animal();
animalSound(dog);
animalSound(cat);
animalSound(genericAnimal);
Output: 
Conclusion: in this article we have seen 'instanceof' narrowing Type and it's syntax. It always returns a boolean value. It helps in cheking whether the object is an instaceof a class or not.
Reference: https://www.typescriptlang.org/docs/handbook/2/narrowing.html#instanceof-narrowing
Similar Reads
TypeScript Equality Narrowing Type In this article, we are going to learn about Equality narrowing Type in Typescript. TypeScript is a popular programming language used for building scalable and robust applications. In TypeScript, "equality narrowing" refers to the process of narrowing the type of a variable based on equality checks
4 min read
TypeScript in operator narrowing Type In this article, we will learn about the 'in' operator narrowing Type in Typescript. In TypeScript, the 'in' operator is used to narrow or refine the type of an object within a conditional statement or block. It checks whether a specific property or key exists within an object, and if it does, it na
3 min read
TypeScript Instanceof Operator The TypeScript instanceof operator checks if an object is an instance of a specified class or constructor function at runtime. It returns a boolean value: `true` if the object is an instance of the type, and `false` otherwise, ensuring robust type checking during execution.SyntaxobjectName instanceo
3 min read
How to implement Type narrowing in TypeScript? Type narrowing in TypeScript refers to refining the type of a variable within a conditional block based on runtime checks. This is achieved through techniques like typeof guards, instance checks, or property existence checks, enabling more precise typing and avoiding type errors in subsequent code e
2 min read
TypeScript Narrowing typeof type guards In this article, we are going to learn about Narrowing typeof type guards. TypeScript is a popular programming language used for building scalable and robust applications. In TypeScript, the typeof type guard allows you to narrow down a variable's type based on the result of the typeof operator. Thi
3 min read