首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascipt动态加载文件,但无法访问构造函数。X不是构造函数。

问Javascipt动态加载文件,但无法访问构造函数。X不是构造函数。
EN

Stack Overflow用户
提问于 2022-01-19 09:20:43
回答 1查看 144关注 0票数 0

我试图摆脱import语句,但希望动态加载Javascript文件。

我是用这门课来做的。

代码语言:javascript
复制
export function JSImport<T>(
    importPromise: Promise<T>,
): Promise<T> {
    // CommonJS's `module.exports` is wrapped as `default` in ESModule.
    return importPromise.then((m: any) => (m.default || m) as T);
}

无论如何,当导入的文件使用构造函数参数时,我会得到错误。

下面是旧用法(效果很好):

代码语言:javascript
复制
declare let Tiff: any;
const tiff = new Tiff({buffer: xhr.response});

以下是新用法:

代码语言:javascript
复制
   const importTiff = JSImport(
    import(/* webpackChunkName: "Tiff" */ 'Tiff'),
    );



   try {
    importTiff.then((Tiff: any) => {
    const tiff = new Tiff({buffer: xhr.response});
    ....
    }

在新的代码线中,我得到了一个错误: TypeError:Tiff不是构造函数

在Chrome控制台中,Tiff变量看起来是这样的。

​

如何使用它作为构造函数?

EN

回答 1

Stack Overflow用户

发布于 2022-01-19 09:56:27

webpack动态导入import(/* chunkNameHint */ "moduleName")实际上提供了一个模块,您在JSImport函数中将其标识为泛型T:

代码语言:javascript
复制
export function JSImport<T>(
    importPromise: Promise<T>, // TypeScript infers T to be the output of the dynamic import, i.e. the full module
): Promise<T>

与其尝试自动“解压缩”模块(该模块可能具有默认导出和/或命名导出),您可以直接使用动态导入:

代码语言:javascript
复制
import(/* webpackChunkName: "Tiff" */ 'Tiff')
  .then((module) => module.default) // Assuming the module has a default export and it is the one you need
  .then((Tiff: any) => {
    const tiff = new Tiff({buffer: xhr.response});
    // ....
   });
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70768023

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档