TypeScript 中 setTimeout 的返回类型

Migel Hewage Nimesha 2022年5月18日
TypeScript 中 setTimeout 的返回类型

setTimeout() 是一种用于在指定的时间(以毫秒为单位)后调用函数的方法。此方法充当计时器,并在计时器到期后执行代码。

setTimeout() 不能多次执行;它只能执行一次。如果需要重复执行,则应使用 setInterval() 方法而不是 setTimeout()

此外,setTimeout() 也称为异步函数。它不会一次执行一项任务。

取而代之的是,在执行另一个功能时,会执行按优先顺序执行的较晚功能。因此,可以执行异步函数,但不能用于在函数堆栈中的函数之间创建暂停。

本文将解释 setTimeout() 函数的返回类型以及如何在 TypeScript 中指定它。

TypeScript 中 setTimeout() 的返回类型

没有必要通过让类型推断识别并返回正确的返回类型来指定返回类型。

如果在逻辑上必须建立返回类型,我们可以使用两种主要方法,例如浏览器和节点声明之间没有一致性的实例。

可以使用 ReturnType 方法,以便 setTimeout() 的返回类型和变量类型相同。另一种方法是 window.setTimeout(),它将返回实际的返回类型。

在 TypeScript 中使用 ReturnType 指定 setTimeout() 的返回类型

我们可以使用的一种方法是 ReturnType。它不指定特定类型,而是让类型自动推断。

const timer: ReturnType<typeof setTimeout> = setTimeout(() => {
    console.log("Hi!")
}, 3000);

输出:

Hi!

上述代码的输出将在代码执行三秒后出现。

考虑另一个示例,我们将返回类型指定为 number

const timer: number = setTimeout(() => {
    console.log("Hi!")
}, 2000);

输出:

Hi!

上述方法在 Node.js 中会遇到错误。

在 Node.js 计时器中,返回的是对象而不是数字返回值。因此,我们可以使用 window.setTimeout() 来避免这种情况。

在 TypeScript 中使用 window.setTimeout() 指定 setTimeout() 的返回类型

window.setTimeout()setTimeout() 都执行类似的功能,但它们在不同的地方执行。window.setTimeout() 只能在浏览器上执行它的操作,而 setTimeout() 可以在任何地方执行它的操作。

当不使用浏览器时,我们可以调用全局对象的方法,而不需要引用该对象。但是,当 TypeScript 或 JavaScript 在浏览器上运行时,文档对象模型 (DOM) 负责提供全局对象。

因此,windowwindow.setTimeout() 中指定,因为文档对象模型指定全局对象具有 window 属性。

语法:

window.setTimeout(function() {}, 0);
Migel Hewage Nimesha avatar Migel Hewage Nimesha avatar

Nimesha is a Full-stack Software Engineer for more than five years, he loves technology, as technology has the power to solve our many problems within just a minute. He have been contributing to various projects over the last 5+ years and working with almost all the so-called 03 tiers(DB, M-Tier, and Client). Recently, he has started working with DevOps technologies such as Azure administration, Kubernetes, Terraform automation, and Bash scripting as well.