检查 TypeScript 中的全局或窗口对象上是否存在属性

Bla*_*ast 3 javascript types typescript

我想将此 JavaScript 代码转换为 TypeScript:

if (!window.INITIALIZED) {
  init();
  window.INITIALIZED = true;
}
runCode();
Run Code Online (Sandbox Code Playgroud)

window对象在 TypeScript 中键入,编译器将抛出错误,指出INITIALIZEDtype 上不存在该属性'Window & typeof globalThis'

如何在不禁用 TypeScript 功能或忽略这些行的类型检查的情况下正确修复此问题?

Cer*_*nce 5

您可以通过将其添加到界面来让 TS 将其识别为有效的窗口属性Window

declare global {
    interface Window {
        INITIALIZED: boolean | undefined;
    }
}
if (!window.INITIALIZED) {
  init();
  window.INITIALIZED = true;
}
runCode();
Run Code Online (Sandbox Code Playgroud)

也就是说,在不必要的情况下,分配给全局对象的属性有点代码味道。如果可能的话,请考虑使用普通变量。