【问题标题】:typescript: import default export from module打字稿:从模块导入默认导出
【发布时间】:2017-09-23 00:57:03
【问题描述】:

我有以下定义类型文件:

// index.d.ts
declare module 'Transformer' {
  class EditableElement {
      constructor(target: SVGPoint);
  }
  export = EditableElement;
}

我想导入EditableElement。但是当我写下下面这行时:

import {EditableElement} from 'Transformer';

我得到下一个错误:

模块“Transformer”解析为非模块实体,无法使用此构造导入。

如何导入EditableElement 类?实际上,我只是想利用那个类。我不希望 import 指令在我的代码中产生附带影响。我只想用它:'(

【问题讨论】:

标签: typescript import export default


【解决方案1】:

这属于 ES6 / CommonJS 互操作。

我的建议是不要依赖互操作,而是使用旧语法:

const EditableElement = require('Transformer')

如果您需要以 es6/es2015 为目标,那么您可以这样做:

import * as EditableElement from 'Transformer'

// with `allowSyntheticDefaultImports`
import EditableElement from 'Transformer'

更新:随着 TypeScript@2.7 的发布,您现在可以直接使用 import EditableElement from 'Transformer'

在您的tsconfig.json 中打开esModuleInterop

【讨论】:

    【解决方案2】:

    declare module 不推荐在您自己的打字稿模块中使用。您必须使用exportexport default

    export class EditableElement {
          constructor(target: SVGPoint);
      }
    

    对于导入,您可以使用import {EditableElement} from 'Transformer';import * as EditableElement from 'Transformer';

    【讨论】:

    • 谢谢。这是由“typings”命令行自动添加的:typings install file:/path/to/my/package/Transformer.d.ts
    • 哦。我错过了它是d.ts。也许我错了。我更喜欢使用 .ts 和 .tsx 来声明类。
    【解决方案3】:

    你有这样的参考路径吗?

     /// <reference path="*/**/myModules.d.ts" />
     import * as m from "SomeModule";
    

    【讨论】:

      【解决方案4】:

      我喜欢这样想。

      场景 1 - 导出/导入显式事物(不是默认导出。这导致需要使用“{}”包装您的导入名称)。

      // Export (fileX)
      export const something = 'hello world';
      
      // Import (fileY)
      import { something } from 'fileX';
      

      场景 2 - 导出/导入默认值(这导致无需使用“{}”包装您的导入名称)。您选择的名称(下面的“某物”)将是访问您的导入的别名。

      // Export (fileX)
      export default 'hello world';
      
      // Import (fileY)
      import something from 'fileY';
      

      【讨论】:

      • 在场景 1 中,我要导出和导入的实体是一个类。当我尝试使用导入的类时,我得到_MyExportFile.default is not a constructor.
      猜你喜欢
      • 2017-02-06
      • 2021-11-24
      • 1970-01-01
      • 2016-01-23
      • 2020-04-13
      • 1970-01-01
      • 2016-02-10
      • 2019-12-11
      • 2021-07-12
      相关资源
      最近更新 更多