我尝试用typescript编写一个去抖动函数,但是不确定用什么类型来设置一个赋值给setTimeout
的变量。
function debounced(func: () => void, wait: number) {
// what type should timeout be here?
let timeout: any;
return () => {
if (timeout) {
clearTimeout(timeout);
}
timeout = setTimeout(() => {
func();
}, wait);
};
}
4条答案
按热度按时间ocebsuys1#
如果你想让你的代码在node.js和浏览器环境之间可移植,你可以像这样使用
setTimeout
的返回类型:因为它在节点和浏览器中声明为返回不同的类型。
f4t66c6m2#
Typescript将自定义类型定义的优先级设置为高于默认类型。
如果您的tsconfig.json文件包含
types: node
,它将告诉Typescript使用在node_modules/@types/node中找到的setTimeout(): NodeJS.Timeout
,而不是默认的setTimeout(): number
方法。如果你并不需要这个类型选项,删除它,这个错误就会消失:
bxgwgixi3#
如果您只是使用浏览器,显式调用
window.setTimeout
应该可以解决这个问题。8ftvxx2r4#
您可以尝试使用window.setTimeout,而不仅仅是setTimeout,这样就可以显式地使用类型脚本