javascript - webpack + typescript : "Property ' jwplayer' does not exist on type 'Window' "when using script-loader

标签 javascript typescript webpack

我正在制作一个相当基本的组件,到目前为止看起来如下:

import * as React from 'react';
import 'lib/jwplayer-7.7.4/jwplayer.js';

interface Props {
  src: string,
};

export default class ShiftPlayer extends React.Component<Props> {
  element: HTMLDivElement = null;

  componentDidMount() {
    const { src, ...props } = this.props;
    window.jwplayer(this.element).setup({
      file: src,
      ...props,
    });
  }

  render() {
    return (
      <div
        ref={(el) => {
          this.element = el;
        }}
      />
    );
  }
}

但是,这在我的 IDE (VSCode) 中始终显示错误:

enter image description here

由于库是通过 script-loader 加载的,我可以假设它存在于 window 对象上。

这是为什么?这应该如何解决?

最佳答案

默认情况下,TypeScript 只知道标准的 window 属性,所以你必须告诉它任何非标准的全局变量,比如 jwplayer。应该这样做:

interface Window {
    jwplayer: any;
}


window.jwplayer(...)

此解决方案使用 declaration merging扩充标准 Window 界面。如果需要在多个地方使用jwplayer,可以考虑将增强的Window界面提取到一个.d.ts文件

关于javascript - webpack + typescript : "Property ' jwplayer' does not exist on type 'Window' "when using script-loader,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45019375/

相关文章:

javascript - 如何使用 React-DND 移动拖动源?

javascript - 鼠标移动和 onclick 事件

typescript - 如何从.net core 2.1 Angular 6模板中的非相对路径导入ts和scss文件

Symfony Webpack/Encore 处理未引用的源图像

javascript - 在 templateUrl 覆盖它之前检索 AngularJS 指令的内部 HTML

javascript - Threejs raycast 未返回正确的点

javascript - 有没有办法在没有猴子补丁的情况下装饰/拦截 Angular 4 中的内置指令?

node.js - 为什么 client.on ("messageCreate"的 TextChannel 中缺少 nsfw 属性?

java - 使用gradle执行不在项目根目录下的webpack

css - 我如何告诉 Rails 6 和 webpack 在布局上只使用特定的 css 和 js