迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > TypeScript >

TypeScript 中 Property does not exist on type Window 错误

作者:迹忆客 最近更新:2022/12/31 浏览次数:

当我们访问 Window 接口上不存在的属性时,会出现“Property does not exist on type 'Window & typeof globalThis' ”错误。 要解决该错误,需要在 .d.ts 文件中扩展 Window 接口,并在窗口对象上添加我们打算访问的属性。

以下是错误发生的示例:

// ⛔️ Property 'example' does not exist on
// type 'Window & typeof globalThis'.ts(2339)
window.example = 'hello';

console.log(window.example);

TypeScript 中 Property does not exist on type Window

在我们的 src 目录中,创建一个包含以下 index.d.ts 文件的类型目录:

export {};

declare global {
  interface Window {
    example: string;
  }
}

代码示例展示了如何使用名为 example 的字符串类型的属性扩展 Window 接口。 这在我们的用例中会有所不同,因此请务必调整属性名称和类型。

如果我们不知道特定属性的类型并希望关闭类型检查,请将其设置为 any

export {};

declare global {
  interface Window {
    example: any; // 👈️ turn off type checking
  }
}

现在我可以在 window 对象上设置和访问 example 属性而不会出现错误。

// ✅ Works now
window.example = 'hello';

console.log(window.example);

如果错误仍然存在,请尝试将我们的类型目录的路径添加到 tsconfig.json 文件中。

{
  "compilerOptions": {
    // ... rest
    "typeRoots": ["./node_modules/@types", "./src/types"]
  }
}

我们在 index.d.ts 文件中使用 export {} 行将其标记为外部模块。 模块是一个包含至少 1 个导入或导出语句的文件,因此我们需要这样做才能扩大全局范围。

请注意 ,我们必须根据用例更改提供的 index.d.ts 文件的内容。

我们应该在 window 对象上添加我们打算访问的所有属性的名称(和类型)。

export {};

declare global {
  interface Window {
    example: string;
  }
}

提供的文件只是添加了一个字符串类型的示例属性,这很可能不是我们需要的。

TypeScript 在查找常规 .ts 文件的相同位置查找 .d.ts 文件,这由 yourtsconfig.json 文件中的包含和排除设置决定。

TypeScript 会将我们声明的 Window 接口与原始 Window 接口合并,因此当我们使用 window 对象时,我们将能够从这两个接口访问属性。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

在 TypeScript 中返回一个 Promise

发布时间:2023/03/19 浏览次数:182 分类:TypeScript

本教程讨论如何在 TypeScript 中返回正确的 Promise。这将提供 TypeScript 中 Returns Promise 的完整编码示例,并完整演示每个步骤。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便