How to Fix "Type 'Timeout' is not assignable to type 'number'" TypeScript Error in Node.js?

Why Does This Happen?

In Node.js, when you use the setTimeout() or setInterval() timer functions, they return a Timeout object, which is different from the numeric IDs returned by the browser's timer functions. Therefore, trying to assign the return value of setTimeout() or setInterval() to a variable with the type "number" will result in the following TypeScript error:

// Error: Type 'Timeout' is not assignable to type 'number'.
const timeoutId: number = setTimeout(() => {
    // ...
}, 2000);
// Error: Type 'Timeout' is not assignable to type 'number'.
const timeoutId: number = setInterval(() => {
    // ...
}, 2000);

How to Fix the Issue?

To fix this issue you can do either of the following:

  1. Specify NodeJS.Timeout as the return type of setTimeout():

    const timeoutId: NodeJS.Timeout = setTimeout(() => {
        // ...
    }, 2000);
    
    const timeoutId: NodeJS.Timeout = setInterval(() => {
        // ...
    }, 2000);
    
  2. Infer the return type of timer function using the TypeScript ReturnType utility type:

    const timeoutId: ReturnType<typeof setTimeout> = setTimeout(() => {
        // ...
    }, 2000);
    
    const timeoutId: ReturnType<typeof setInterval> = setInterval(() => {
        // ...
    }, 2000);
    

This post was published (and was last revised ) by Daniyal Hamid. Daniyal currently works as the Head of Engineering in Germany and has 20+ years of experience in software engineering, design and marketing. Please show your love and support by sharing this post.