应该在打字稿中定义什么类型的超时

时间:2019-02-28 21:47:58

标签: javascript typescript ecmascript-6

我正在尝试在打字稿中编写一个防反跳函数,但是不确定要设置分配给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 个答案:

答案 0 :(得分:3)

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

let timeout: ReturnType<typeof setTimeout>;

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

答案 1 :(得分:0)

Typescript优先考虑自定义类型定义,而不是默认类型。

如果您的tsconfig.json文件包含types: node,则表示Typescript使用在 node_modules / @ types / node 中找到的setTimeout(): NodeJS.Timeout,而不是默认的{{1 }}方法。

setTimeout(): number

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

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

答案 2 :(得分:0)

如果您只是使用浏览器,显式调用 layout( yaxis = list( tickformat = ".1%", tickvals = seq(.02,.06, .005) )) 应该可以解决这个问题。