【问题标题】:Typescript on VSCode - Declaring a property on the window object [duplicate]VSCode上的打字稿-在窗口对象上声明属性[重复]
【发布时间】:2019-03-14 20:27:42
【问题描述】:

我们将 Typescript 项目 (React) 嵌入到我们的网页中。在某些情况下,我们也需要允许我们的 Typescript 代码与页面上的其他元素进行通信。

例如,我们想要一个打开 React-Typescript 组件的链接,反之亦然,为 React 组件中的按钮打开一个基于 jquery 的模式。

出于这些目的,我们在窗口对象上创建了一个对象。

window.gwFunctions = {
   openModal: ()=>{
      codeToOpenModal
   }
}

VSCode 看到window.gwFunctions 时会报错

Property 'TS_FUNCTIONS' does not exist on type 'Window'.ts(2339)

它建议对declare property gwFunctions 进行可能的修复。选择此选项将通过在lib.dom.d.ts 的窗口界面上声明此属性来解决问题。唯一的问题是该文件位于C:\Program Files\Microsoft VS Code\resources\app\extensions\node_modules\typescript\lib\lib.dom.d.ts 中,由所有项目/工作区共享。

是否可以仅在当前项目/工作区上声明此属性?

【问题讨论】:

  • 为什么不使用window['gwFunctions'] = ...并以同样的方式访问var bla = window['gwFunctions'];
  • jep 这听起来是正确的@Silvermind .. 如果你定义一些全局的东西它是全局的,比如 localstorage。如果你想处理限制,你必须创建一个包含所有数据的对象,然后你需要处理数据和访问的函数。即:window.sharedData = { namespace: 'mynamespace', values: [] } 现在您可以编写一些处理限制的访问器

标签: typescript visual-studio-code


【解决方案1】:

您可以通过将其放在您的 TypeScript 文件中来添加到 Window 类型定义。

declare global {
    interface Window {
        gwFunctions: {
            [key: string]: () => void;
        }
    }
}

lib.dom.d.ts 文件中的类型声明将与您定义的类型合并。 Here is the official documentation on declaration merging in the TypeScript handbook.

【讨论】:

    猜你喜欢
    • 2018-12-16
    • 1970-01-01
    • 2018-02-07
    • 2019-05-28
    • 2018-11-06
    • 2017-09-06
    • 1970-01-01
    • 2021-01-20
    • 1970-01-01
    相关资源
    最近更新 更多