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

在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>;

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

 类似资料:
  • 考虑以下代码: Typescript引发错误:。 但是如果我正在进行基于浏览器的开发,使用感觉是错误的。哪个是正确的类型定义或返回类型,可以让在不求助于声明的情况下工作?

  • 处理计时器时正确的类型是什么?我试过和

  • 下面这个贴图中的告警怎么去除呢,需要怎么修改呢? 代码如下: 问题补充: 实例化后为其赋值时 ts警告:类型实例化过深,且可能无限 PbfLayer这个类中的完整代码如下:

  • 问题内容: 何时使用泛型会引起一些混乱。我看过Java泛型?但仍然有一些问题。 说我有: 我应该使用: 要么 还是取决于执行的任务? 是泛型的,仅用于聚合关系(容器等);也就是说,它们只是用于收藏吗? 问题答案: 人们通常不会使用汽车类型来参数化。他们的车只定义了非常烦人的人。人们也及时换车。因此,即使仅出于语义考虑,我也不会参数化类。 在深入了解此类编程细节之前,请考虑一下您想从现实世界中模仿的

  • 定义一个类型 条件1:变量类型是一个字符串。 条件2:变量值不是 get "typescript": "~5.2.2"

  • 在我的项目中,我希望有一个包含所有类型脚本定义的文件,如下所示: type_defs.tsx: 问题是,当我尝试导出typedefs时,如下所示: 我得到了错误: 正如我在网络中发现的那样,只能对typedef文件进行默认导出,这意味着我必须为每个类型定义准备一个文件,这绝对是荒谬的! 在我看来,不允许typedefs具有多个非默认导出的约束完全是无稽之谈,并且使编码变得多余且难以重用。拥有一个包