typescript:从模块导入默认导出

typescript:从模块导入默认导出,typescript,import,export,default,Typescript,Import,Export,Default,我有以下定义类型文件: // index.d.ts declare module 'Transformer' { class EditableElement { constructor(target: SVGPoint); } export = EditableElement; } 我想导入EditableElement。但当我写下以下一行时: import {EditableElement} from 'Transformer'; 我得到下一个错误: 模块“Tran

我有以下定义类型文件:

// index.d.ts
declare module 'Transformer' {
  class EditableElement {
      constructor(target: SVGPoint);
  }
  export = EditableElement;
}
我想导入
EditableElement
。但当我写下以下一行时:

import {EditableElement} from 'Transformer';
我得到下一个错误:

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


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

这属于ES6/CommonJS互操作

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

const EditableElement = require('Transformer')
如果您需要以es6/es2015为目标,那么您可以:

import * as EditableElement from 'Transformer'

// with `allowSyntheticDefaultImports`
import EditableElement from 'Transformer'
更新:与TypeScript@2.7发布后,您现在可以直接从“Transformer”导入可编辑元素


在您的
tsconfig中打开
esModuleInterop
。json

声明模块
不推荐在您自己的typescript模块中使用。您必须使用
导出
导出默认值

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

对于导入,您可以从“Transformer”使用
import{EditableElement};
import*作为“Transformer”的EditableElement;

您有这样的引用路径吗

 /// <reference path="*/**/myModules.d.ts" />
 import * as m from "SomeModule";
//
从“SomeModule”导入*作为m;

我喜欢用以下方式来思考这个问题

场景1-导出/导入显式内容(不是默认导出。这导致需要将导入名称包装为“{}”)

场景2-导出/导入默认值(这导致不需要将导入名称包装为“{}”)。下面选择的名称“something”将是访问导入的别名

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

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

请看这个问题,这不是“默认导出”,而是CommonJS格式。谢谢。这是由“打字”自动添加的命令行:typings install file:/path/to/my/package/Transformer.d.tsOh。我没有注意到它是d.ts。也许我错了。我更喜欢使用.ts和.tsx来声明类。在场景1中,我导出和导入的实体是一个类。当我尝试使用导入的类时,我得到
\u MyExportFile.default不是构造函数。
// Export (fileX)
export default 'hello world';

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