【问题标题】:Typing third-party library with require('./lib').default使用 require('./lib').default 键入第三方库
【发布时间】:2018-08-11 23:01:11
【问题描述】:

我正在尝试输入dynamic-cdn-webpack-plugin,但是我有点卡住了。在库中,模块导出为module.exports = require('./lib').default; 通过我的打字,我得到:

错误 TS2351:无法将“new”与类型缺少调用或构造签名的表达式一起使用。

declare module "dynamic-cdn-webpack-plugin" {
  import * as webpack from "webpack";
  interface Options {
    disable?: boolean;
    env?: string;
    exclude?: string[];
    only?: string[];
    verbose?: boolean;
    resolver?: () => {
      name: string;
      var: string;
      url: string;
      version: string;
    };
  }
  export class DynamicCdnWebpackPlugin extends webpack.Plugin {
    constructor(options?: Options);
  }
}

如果我将其更改为 export default class,那么我会得到 ​​p>

发射跳过

我的猜测是我必须以某种方式指出 DynamicCdnWebpackPlugin 是该库的默认导出,但我想不出办法

【问题讨论】:

  • 错误出现在哪一行?
  • 当我在 webpack.config.ts 中使用插件时会发生这种情况:new DynamicCdnWebpackPlugin()
  • 在webpack.config.ts中,DynamicCdnWebpackPlugin的导入是什么样子的?
  • import DynamicCdnWebpackPlugin from "dynamic-cdn-webpack-plugin";
  • 从类型检查的角度来看,export default class 似乎是正确的。成功编译 webpack.config.ts 后,“Emit skipped”是否是在您的项目上运行 Webpack 时出现的错误消息?如果是这样,那是我无法帮助解决的与 Webpack 相关的问题,我们应该将 webpack 标签添加到问题中。

标签: typescript


【解决方案1】:

毕竟这是一个 webpack 问题。我看了一下webpack docs,发现ts-node必须使用commonjs模块系统,否则会失败。我的解决方案是使用tsconfig-paths,我可以指定对除 webpack.config 文件之外的所有内容使用 es 模块。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-18
    • 2012-12-08
    • 2015-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多