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

标签 javascript typescript amd

例如,我在 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/

相关文章:

javascript - YouTube 视频在 iPhone 的 Safari 或 UIWebView 上自动播放

javascript - 使用 JSDoc 时 Visual Studio Code 中的注释突出显示

typescript - 预期有 2 个参数,但得到 1.ts(2554) core.d.ts(8064, 47) : An argument for 'opts' was not provided

jquery-ui - requirejs + jqueryui = $.widget 未定义

javascript - Codekit 忽略 .jshintrc

javascript - 如何确定 JS 文件是否与 AMD 兼容?

javascript - 如何使用样式化组件覆盖 React 组件样式?

Javascript for 循环appendChild 不会附加所有项目

javascript - 在公司内部网上使用 GSuite 和谷歌身份的 api

Angularjs+Typescript 指令实现 $compile