例如,我有香草JS的AMD模块(未由tsc
触摸):如何将TypeScript ES6默认导入映射到AMD模块的返回值?
// 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
当我编译我的打字稿模块到AMD格式tsc
并在我的RequireJS环境中运行时,出现错误default
是不确定的,因为打字稿编译为:
define("app", ["require", "exports", "Foo"], function (require, exports, Foo_1) {
"use strict";
console.log(Foo_1["default"]);
});
我不希望它抢default
财产。我希望它能处理一个默认导入,就像它只是获取我定义模块的返回值。我的项目中的每个模块都是define()
模块,或者是编码为define()
(AMD)的打字稿模块。我只想获得那个返回对象。
有没有办法(配置)呢?
编辑:
我知道我可以import * as Foo from './Foo'
,但就是有点哈克,并生成错误,因为该声明的模块没有叫出口。如果可能的话,我想要一个非错误的方式来做到这一点。
编辑:我了解到我可以做
// app.ts
import Foo = require('./Foo')
new Foo // no error
达到的效果。唯一的问题是它不是ES6兼容的。这意味着如果我们告诉打印机保持原样离开ES6导入语句,那么其他工具就不会理解打印机特定的导入/导出语句。我需要一种合理使用官方ES6模块语法的方法。
我认为我的解决方案可能是做一个post-tsc-compile转换步骤来转换默认导入接入点。
这是一个有趣的方式来获得富。如果我有'tsc'忽略错误并且仍然发出一个包,那就行了。但是有错误,因为'.d.ts'文件看起来就是这样(参见更新后的问题)。还有什么建议? – trusktr
噢,我想'import Foo = require('./ Foo')'可以工作,但它不是ES6,所以如果代码曾经用于其他TS只编译语言但仅保留模块语法的环境中,工作。还是会呢? – trusktr