【问题标题】:Typescript Error: setInterval - Type 'Timer' is not assignable to type 'number'打字稿错误:setInterval - 类型“计时器”不可分配给类型“数字”
【发布时间】:2019-04-10 21:33:46
【问题描述】:

我有以下代码:

let onSizeChangeSetInterval = setInterval(() => {...}, 30);

当我编译这段代码时,我收到以下错误:

src/components/popover/popover.component.ts(98,17) 中的错误:错误 TS2322:类型“计时器”不可分配给类型“数字”。 src/modules/forms-ui/formly/types/daterange/picker.daterange.component.ts(186,9): error TS2322: Type 'Timer' is notassignable to type 'number'。

【问题讨论】:

    标签: javascript angular typescript


    【解决方案1】:

    改用window.setInterval

    【讨论】:

    • 尝试在服务器端构建应用程序时访问window 会中断。
    • 对于那些可能不知道的人来说,普通的'旧setInterval 似乎返回NodeJS.Timeout(根据代码检查)但window.setInterval 返回number
    • 我在 vue cli 项目中使用window.setInterval,但仍然出现错误。我必须将其输入为number
    【解决方案2】:

    通过查看error TS2322,它看起来像是 TypeScript 错误,而不是 JavaScript 错误。基本上,您正在尝试将类型编号变量转换为计时器。

    你能代替吗?

    let onSizeChangeSetInterval:NodeJS.Timer;
    onSizeChangeSetInterval = setInterval(() => {...}, 30);
    

    取自

    http://evanshortiss.com/development/nodejs/typescript/2016/11/16/timers-in-typescript.html

    【讨论】:

    • 是的。我认为他也可以使用var 而不是let
    • 我猜他可以。但我强烈建议使用 ES6 letconst 并避免使用 var。 Var 不是块作用域的,所以我建议停止使用它并完全切换到前两种类型的变量。拥抱更新的 JavaScript (ES6) (hackernoon.com/js-var-let-or-const-67e51dbb716f)
    • TypeScript 编译器无法区分 setInterval 与 @types/nodelib.dom.ts,使用 window.setInterval 去歧义,在浏览器中返回类型应为 number
    【解决方案3】:

    使用ReturnType:

    let onSizeChangeSetInterval: ReturnType<typeof setInterval> | undefined;
    onSizeChangeSetInterval = setInterval(() => {...}, 30);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-02
      • 2021-06-17
      • 1970-01-01
      • 2018-09-29
      • 1970-01-01
      • 1970-01-01
      • 2021-10-11
      相关资源
      最近更新 更多