例如,我在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"]);
});
我不希望它抓住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转换步骤来转换默认的导入访问点。
答案 0 :(得分:0)
尝试
import * as Foo from './Foo'