【问题标题】:Importing modules without a default export in TypeScript (CommonJS)在 TypeScript (CommonJS) 中导入没有默认导出的模块
【发布时间】:2017-05-01 16:53:31
【问题描述】:

是否可以通过import module from 'module'; 导入未定义默认导出的模块并将其编译为 commonjs?

这个Stack Overflow Answer 表明通过--allowSyntheticDefaultImports 选项是可能的(尽管仅适用于systemjs 模块?)。 Compiler Options Documentation 声明 allowSyntheticDefaultImports 只影响类型检查。

除了import * from module as 'module'; 语法之外还有什么变通方法吗?

【问题讨论】:

  • 只是好奇,为什么你必须使用导入模块的语法对你很重要?如果import * from module as 'module' 有效,您为什么不想使用它?
  • 几个原因:1)它很丑 2)它在导入一个故意没有默认导出的模块和一个确实有默认导出的模块之间产生了差异,尽管语法不同.理论上,一旦(/if)jquery.d.ts 文件被更新以正确(imo)将 JQuery 函数导出为默认函数,就需要更改语法解决方法。
  • 所以忽略 #1 哈哈,你的观点 #2 并不取决于你,或者取决于 .d.ts 文件。如果实际的.js 文件定义了默认导出,那么.d.ts 文件应该包含该信息并且您可能会使用import module from 'module'; 导入它如果实际的.js 文件只定义了命名导出,那么.d.ts文件将反映这一点,并且您使用命名导入或通配符导入来导入内容,如您的帖子中所述。 TLDR:您使用的导入语法由实际 JS 模块的形状决定

标签: typescript


【解决方案1】:

你描述的不是CommonJS...

CommonJS 是 Node 实现的模块 API,您可以使用 module.exportsexportsrequire 来管理您的模块。

TypeScript 是 JavaScript 的超集,依赖于 ES6 原生模块。因此,如果您不想要默认导出,您应该可以执行以下操作:

你的模块

export function foo() {
  console.log('Foo');
};

export function bar() {
  console.log('Bar');
};

您的切入点

import {foo, bar} from './module';

foo();
bar();

【讨论】:

  • 我想在不使用 import * as $ from 'jquery'; 的情况下将 JQuery(非打字稿模块)导入打字稿文件并将该文件编译为 commonjs。
  • 你为什么不把这些信息放在你的问题中? :)
猜你喜欢
  • 2017-10-26
  • 1970-01-01
  • 2016-05-15
  • 2019-09-16
  • 2021-08-24
  • 2016-07-30
  • 2015-06-18
  • 1970-01-01
  • 2012-12-07
相关资源
最近更新 更多