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

Javascript 如何将TypeScript ES6默认导入映射到AMD模块的返回值?,javascript,typescript,amd,Javascript,Typescript,Amd,例如,我有一个vanilla JS中的AMD模块(没有被tsc触及): 随附声明文件: // 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模

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

随附声明文件:

// 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
属性。我希望它将默认导入视为简单地获取define模块的返回值。我的项目中的每个模块都是
define()
模块,或者是编译为
define()
(AMD)的typescript模块。我只想得到那个返回对象

有没有办法做到(配置)这一点

编辑:

我知道我可以从‘/Foo’以Foo的形式导入*,但这有点像黑客,它会生成错误,因为声明的模块没有命名的导出。如果可能的话,我想用一种无错误的方式来做

编辑:我学会了我能做什么

// app.ts
import Foo = require('./Foo')
new Foo // no error
为了达到目的。唯一的问题是它与ES6不兼容。这意味着,如果我们告诉typescript保持ES6导入语句不变,那么其他工具将无法理解特定于typescript的导入/导出语句。我需要一种方法,以合理的方式只使用正式的ES6模块语法

我认为我的解决方案可能是只执行tsc编译后转换步骤来转换默认的导入访问点。

试试看

import * as Foo from './Foo'
试一试


这是一个有趣的方式得到福。如果我有
tsc
忽略错误并且仍然发出一个bundle,那就行了。但是会出现错误,因为
.d.ts
文件的外观与此相同(请参阅更新的问题)。还有什么建议吗?哦,我想,
import Foo=require('./Foo')
是可行的,但它不是ES6,因此如果在TS只编译语言而不使用模块语法的其他环境中使用该代码,它将无法工作。或者会吗?那是一个搞笑的方法。如果我有
tsc
忽略错误并且仍然发出一个bundle,那就行了。但是会出现错误,因为
.d.ts
文件的外观与此相同(请参阅更新的问题)。还有什么建议吗?哦,我想,
import Foo=require('./Foo')
是可行的,但它不是ES6,因此如果在TS只编译语言而不使用模块语法的其他环境中使用该代码,它将无法工作。还是会?
import * as Foo from './Foo'