当前位置: 首页 > 知识库问答 >
问题:

TypeScript中的setTimeout应该使用什么返回类型?

汪跃
2023-03-14

考虑以下代码:

const timer: number = setTimeout(() => '', 1000);

Typescript引发错误:Type“Timer”不可分配给Type“number” 快速查找告诉我,setTimeout返回NodeJS。计时器

但是如果我正在进行基于浏览器的开发,使用NodeJS. Timer感觉是错误的。哪个是正确的类型定义或返回类型,可以让setTimeout在不求助于任何声明的情况下工作?

共有3个答案

宋宇
2023-03-14

发生这种情况是因为Typescript将搜索节点单元模块/类型下的所有类型定义

如果您将NodeJS类型定义(随许多npm包一起)安装到~/node\u modules/@types/node/globals中。如果您的项目位于~/Projects/myproject中,则设置超时的NodeJS定义将泄漏。

默认情况下,所有可见的“@类型”包都包含在您的编译中。任何封闭文件夹的node_modules/@类型中的包都被认为是可见的;具体来说,这意味着./node_modules/@类型/、.../node_modules/@类型/、.../.../node_modules/@类型/等等中的包。

请参阅:https://www.typescriptlang.org/tsconfig#types

解决方案:

  • 指定编译器选项以搜索类型定义的路径:“typeRoots”:[]
  • 指定编译器选项,从默认路径加载哪些类型定义:“类型”:[]
  • 从默认搜索路径中删除定义文件

解决方法:

  • 使用window.setTimeout()代替
郜驰
2023-03-14

您可以使用窗口。setTimeout返回一种类型的数字。

let a: number;
a = window.setTimeout(function() {}, 0);
吴开宇
2023-03-14

最简单的解决方案是允许类型推断工作,而不指定任何类型。如果需要指定类型,鉴于浏览器和节点声明之间的类型不一致,可以使用ReturnType指定变量的类型,无论setTimeout的返回类型是什么:

const timer: ReturnType<typeof setTimeout> = setTimeout(() => '', 1000);

或者,<代码>窗口。也可以使用setTimeout,而不仅仅是setTimeout。它返回正确的返回类型。

 类似资料:
  • 我看过返回IList vs ICollection vs Collection以及它链接的其他问题,但我仍然对这个问题感到困惑。 出于演示目的,我们假设我有一个类,在其中公开了一个公共方法,如下所示: 要遵循CA1002,我的方法应该返回实际的集合类(、等)或它们的接口(、等),如果我希望返回具体?

  • 我试图在typescript中编写一个去Bounce函数,但不确定设置分配给setTimeout的变量的类型。我的代码如下所示:

  • 当某个对象具有装箱类型属性时,该属性的getter返回。但是这应该返回,因为boxed type属性的默认值是。这里有什么问题?

  • 问题内容: 我莫名其妙地迷糊了自己。 不知何故,我想到用AJAX(如$ .post)打PHP时,您必须回显“ true”或“ false”,而不是返回true / false。我现在知道不是这种情况,但是有人可以为我分解吗? 测试布尔值是否存在问题?像这儿 那是有问题的情况,对吗?在这里,我不能返回true / false,而是必须回显一个字符串并测试该字符串,是吗? 但是我看到布尔true /

  • 我正在尝试返回在setTimout中计算的值。但好像我拿不出这个值。我读到要做到这一点,我必须用promise。我是否必须像下面这样使用它:https://italonascimento.github.io/application-a-timeout-to-your-promissions/?

  • 问题内容: 我已经用python编程了大约两年了。主要是数据资料(熊猫,mpl,numpy),还有自动化脚本和小型Web应用程序。我试图成为一个更好的程序员,并增加我的python知识,而困扰我的一件事是我从未使用过一个类(除了为小型Web应用程序复制随机烧瓶代码外)。我通常理解它们是什么,但是我似乎无法为为什么在一个简单的函数中需要它们的问题而wrap之以鼻。 为了使我的问题更具针对性:我编写了