首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >setTimeout在TypeScript中应该使用什么返回类型?

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

Stack Overflow用户
提问于 2018-06-26 10:31:49
回答 6查看 103.1K关注 0票数 176

考虑以下代码:

代码语言:javascript
运行
复制
const timer: number = setTimeout(() => '', 1000);

类型记录引发一个错误:Type 'Timer' is not assignable to type 'number'.快速查找告诉我setTimeout返回NodeJS.Timer

但是,如果我正在进行基于浏览器的开发,使用NodeJS.Timer感觉是错误的。使setTimeout工作而不诉诸any声明的正确类型定义还是返回类型?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2018-06-26 10:35:37

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

代码语言:javascript
运行
复制
const timer: ReturnType<typeof setTimeout> = setTimeout(() => '', 1000);

另外,也可以使用window.setTimeout,而不仅仅是setTimeout。它返回正确的返回类型。

票数 318
EN

Stack Overflow用户

发布于 2019-04-10 08:25:39

您可以使用window.setTimeout,它返回一种类型的number

代码语言:javascript
运行
复制
let a: number;
a = window.setTimeout(function() {}, 0);
票数 58
EN

Stack Overflow用户

发布于 2020-06-11 11:11:35

这是因为类型记录将搜索node_modules/@types下的所有类型定义。

如果您将NodeJS类型定义(附带了许多npm包)安装到~/node_modules/@types/node/globals.ts中,并且您的项目位于~/Projects/myproject中,那么setTimeout的NodeJS定义就会泄漏。

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

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

如果类型记录找到自定义类型定义,则它将优先于默认类型定义。

解决办法:

  • 指定要搜索类型定义的compilerOption路径:"typeRoots":[]
  • 指定要从默认路径加载的定义的compilerOption:"types": []
  • 从默认搜索路径中删除定义文件

解决办法:

  • 使用window.setTimeout()代替
票数 24
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51040703

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档