考虑以下代码:
const timer: number = setTimeout(() => '', 1000);
类型记录引发一个错误:Type 'Timer' is not assignable to type 'number'.
快速查找告诉我setTimeout
返回NodeJS.Timer
。
但是,如果我正在进行基于浏览器的开发,使用NodeJS.Timer
感觉是错误的。使setTimeout
工作而不诉诸any
声明的正确类型定义还是返回类型?
发布于 2018-06-26 10:35:37
最简单的解决方案是允许类型推断工作,而根本不指定任何类型。如果需要指定类型,因为浏览器和节点声明之间的类型不一致,可以使用ReturnType
指定变量的类型是setTimeout
的返回类型:
const timer: ReturnType<typeof setTimeout> = setTimeout(() => '', 1000);
另外,也可以使用window.setTimeout
,而不仅仅是setTimeout
。它返回正确的返回类型。
发布于 2019-04-10 08:25:39
您可以使用window.setTimeout
,它返回一种类型的number
。
let a: number;
a = window.setTimeout(function() {}, 0);
发布于 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
如果类型记录找到自定义类型定义,则它将优先于默认类型定义。
解决办法:
"typeRoots":[]
"types": []
解决办法:
window.setTimeout()
代替https://stackoverflow.com/questions/51040703
复制相似问题