我有以下定义类型文件:
// index.d.ts
declare module 'Transformer' {
class EditableElement {
constructor(target: SVGPoint);
}
export = EditableElement;
}
我想要导入EditableElement
。但是当我写下以下一行时:
import {EditableElement} from 'Transformer';
我收到了下一个错误:
模块“Transformer”解析为非模块实体,无法使用此构造导入。
我如何导入EditableElement
课程?实际上,我只是想利用那个班级。我不希望import
指令在我的代码中有附带效果。我只想用它:'(
答案 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
在您自己的打字稿模块中使用。您必须使用export
或export 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';