例如,我在 vanilla JS 中有一个 AMD 模块(没有被 tsc
触及):
// Foo.js
define([], function() {
return class Foo {}
})
附带声明文件:
// Foo.d.ts
declare class Foo {
// ...
}
export default Foo
然后我有一个 typescript 模块:
// app.ts
import Foo from './Foo'
new Foo // Uncaught TypeError: Foo_1.default is not a constructor
当我使用 tsc
将 typescript 模块编译为 AMD 格式时并在我的RequireJS环境中运行它,出现错误default
未定义,因为 typescript 编译为:
define("app", ["require", "exports", "Foo"], function (require, exports, Foo_1) {
"use strict";
console.log(Foo_1["default"]);
});
我不想让它抢到 default
属性(property)。我希望它对待默认导入就像简单地获取我的定义模块的返回值一样。我的项目中的每个模块都是 define()
模块,或编译为 define()
的 typescript 模块(AMD)。我只是想获得该返回对象。
有办法做到这一点(配置)吗?
编辑:
我知道我可以import * as Foo from './Foo'
,但这有点hacky,并且它会生成错误,因为声明的模块没有命名导出。如果可能的话,我想要一种无错误的方法来做到这一点。
编辑:我知道我可以做到
// app.ts
import Foo = require('./Foo')
new Foo // no error
达到这个结果。唯一的问题是它不兼容 ES6。这意味着,如果我们告诉 typescript 按原样保留 ES6 导入语句,那么其他工具将无法理解特定于 typescript 的导入/导出语句。我需要一种以合理的方式仅使用官方 ES6 模块语法的方法。
我认为我的解决方案可能只是执行 tsc 编译后转换步骤来转换默认导入访问点。
最佳答案
尝试
import * as Foo from './Foo'
关于javascript - 如何将 TypeScript ES6 默认导入映射到 AMD 模块的返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41843664/