在同一个 typescript 文件中同时导入和导出有什么意义

rdrgkggo  于 2023-03-04  发布在  TypeScript
关注(0)|答案(1)|浏览(147)

我读了chart.js源文件,发现下面几行:

export * from './controllers/index.js';
export * from './core/index.js';
export * from './elements/index.js';
export * from './platform/index.js';
export * from './plugins/index.js';
export * from './scales/index.js';

import * as controllers from './controllers/index.js';
import * as elements from './elements/index.js';
import * as plugins from './plugins/index.js';
import * as scales from './scales/index.js';

export {
  controllers,
  elements,
  plugins,
  scales,
};

我对***import * 这一行有一点理解,但不是很确定,因为控制器来自'./controllers/index.js'***;然后将其导出为不同的简单名称*controllers***。
但是为什么*从'./controllers/index.js'导出
;它似乎做重复的事情作为导入/导出相同的包。
我发现很多ts脚本都是这样做的。有人能给予一下这段代码的好处/原因吗?
这不会导致任何依赖循环问题吗?
明白了。我看到很多例子都是这样做的。我认为它是基于TS的一些惯例。

gopyfrb3

gopyfrb31#

他们确实进口/出口同样的东西,* 但方式略有不同 *。
这个

export * from './controllers/index.js';

将以原始导出名称重新导出来自该其他文件的所有导出。例如,如果该文件具有export const foo = 'foo';,则上面的行将创建名为foo的命名导出。它允许通过此文件使用controllers

import foo from './thepath.js';
console.log(foo);

但是这个

import * as controllers from './controllers/index.js';
export {
  controllers,

而是将所有的导入放入一个命名的导出中,一个名为controllers的命名空间对象。它允许通过以下文件使用controllers

import { controllers } from './thepath.js';
console.log(controllers.foo);

所以它是在重复导出,但这很可能是故意的,这样模块的消费者就会发现有更多的选择是很方便的。这样的重复不是"必要的",只是他们决定使用的一个设计选择。
这不会导致任何依赖循环吗?
不,没有循环依赖。

相关问题