typescript:从模块导入默认导出

时间:2017-04-25 20:27:24

标签: typescript import export default

我有以下定义类型文件:

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

我想要导入EditableElement。但是当我写下以下一行时:

import {EditableElement} from 'Transformer';

我收到了下一个错误:

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

我如何导入EditableElement课程?实际上,我只是想利用那个班级。我不希望import指令在我的代码中有附带效果。我只想用它:'(

4 个答案:

答案 0 :(得分:7)

这属于ES6 / CommonJS互操作。

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

const EditableElement = require('Transformer')

如果您需要定位es6 / es2015,那么您可以这样做:

import * as EditableElement from 'Transformer'

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

更新:发布了TypeScript@2.7,您现在可以直接执行import EditableElement from 'Transformer'

启用esModuleInterop

中的tsconfig.json

答案 1 :(得分:1)

不推荐使用

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

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

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

答案 2 :(得分:0)

你有这样的参考路径吗?

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

答案 3 :(得分:0)

我喜欢以以下方式考虑这一点。

方案1-导出/导入显式内容(不是默认导出。这导致需要用'{}'包裹导入名称)。

// Export (fileX)
export const something = 'hello world';

// Import (fileY)
import { something } from 'fileX';

方案2-导出/导入默认值(这样就无需用'{}'包裹导入名称)。您在下面选择的名称“ something”将成为访问导入文件的别名。

// Export (fileX)
export default 'hello world';

// Import (fileY)
import something from 'fileY';