首页 文章

如何将TypeScript ES6默认导入映射到AMD模块的返回值?

提问于
浏览
0

例如,我在vanilla JS中有一个AMD模块(未被 tsc 触及):

// Foo.js
define([], function() {
  return class Foo {}
})

随附的申报文件:

// Foo.d.ts
declare class Foo {
  // ...
}

export default Foo

然后我有一个打字稿模块:

// app.ts
import Foo from './Foo'
new Foo // Uncaught TypeError: Foo_1.default is not a constructor

当我使用 tsc 将我的打字稿模块编译为AMD格式并在我的RequireJS环境中运行时,出现了一个错误,即 default 未定义,因为typescript编译为:

define("app", ["require", "exports", "Foo"], function (require, exports, Foo_1) {
    "use strict";
    console.log(Foo_1["default"]);
});

我不希望它 grab default 属性 . 我希望它处理默认导入,就像它只是抓取我的define模块的返回值 . 我项目中的每个模块都是 define() 模块,或者编译为 define() (AMD)的打字稿模块 . 我只想得到那个返回对象 .

有没有办法(配置)这个?

编辑:

我知道我可以 import * as Foo from './Foo' ,但这有点hacky,它会产生错误,因为声明的模块没有命名导出 . 如果可能的话,我想要一种非错误的方法来做到这一点 .

编辑:我知道我可以做

// app.ts
import Foo = require('./Foo')
new Foo // no error

实现结果 . 唯一的问题是它不兼容ES6 . 这意味着如果我们告诉typescript按原样保留ES6 import语句,那么其他工具将无法理解特定于typescript的导入/导出语句 . 我需要一种方法来以合理的方式使用官方ES6模块语法 .

我认为我的解决方案可能只是做一个post-tsc-compile转换步骤来转换默认的导入访问点 .

1 回答

  • 0

    尝试

    import * as Foo from './Foo'
    

相关问题