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

在typescript中应该定义什么类型的超时

公良信然
2023-03-14

我试图在typescript中编写一个去Bounce函数,但不确定设置分配给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);
    };
}

共有3个答案

燕玉堂
2023-03-14

如果您只是使用浏览器,显式调用window.setTimeout应该可以解决这个问题。

公良阳波
2023-03-14

Typescript将自定义类型定义优先于默认类型。

如果您的tsconfig。json文件包含类型:node,它告诉Typescript使用setTimeout():NodeJS。在node_modules/@types/node中找到Timeout,而不是默认的setTimeout():number方法。

"compilerOptions": {
    "types": [
      "node",
      ...
    ]
}

如果您不明确需要该类型选项,请将其删除,此错误将消失:

"compilerOptions": {
}
南宫嘉
2023-03-14

如果您希望代码在节点之间可移植。在js和浏览器环境中,可以使用返回类型setTimeout,如下所示:

let timeout: ReturnType<typeof setTimeout>;

因为它声明在节点和浏览器中返回不同的类型。

 类似资料: