导出 `index.ts` 中的所有文件

Posted

技术标签:

【中文标题】导出 `index.ts` 中的所有文件【英文标题】:Export all files in `index.ts` 【发布时间】:2021-11-25 15:13:21 【问题描述】:

希望能够直接从components 目录导入components 目录中的任何组件。

当前目录结构为:

src
├── components
│   ├── Camera.tsx
│   ├── Keyboard.tsx
│   └── index.ts
└── screens
    └── App.tsx

并希望能够导入如下:

// src/screens/App.tsx

import  Keyboard  from '../components'

第一种选择显然是在src/components/index.ts 中维护一长串导出:

// src/components/index.ts

export  Camera  from './Camera'
export  Keyboard  from './Keyboard'

但是,维护起来很麻烦。有没有办法使用glob 和导出对象来自动导出所有组件,或者可能是其他方式一起导出?

【问题讨论】:

不,这是不可能的。您只能从模块导入,不能从目录导入。但是您可以从路径导出所有内容。这已经在这里问过了:***.com/questions/40702842/… 我不是在要求导入目录,我是在要求“破解”以“自动”让它看起来像我可以。 不过,感谢您分享上一个问题。事实证明这是可能的。那里有人发布了解决方案。 您将不得不像现在一样重新导出对象。如果它确实变得难以维护,那么请重新考虑这是否应该都是同一个模块的一部分。维护足够小的模块应该不会那么烦人。 编写生成文件的脚本。 【参考方案1】:

既然您使用的是 TypeScript,为什么不像 here 中描述的那样在 TsConfig 中使用 paths

【讨论】:

【参考方案2】:

您可以通过将index.ts 编辑成这样来实现这一点

src
├── components
│   ├── Camera.tsx
│   ├── Keyboard.tsx
│   └── index.ts <=== this file
└── screens
    └── App.tsx
export * from './Camera'
export * from './Keyboard'

【讨论】:

【参考方案3】:

在这种情况下,您需要在您的components 目录中创建一个index.ts 文件。

首先,将所有组件导入其中:

import Camera from './Camera'
import Keyboard from './Keyboard'
// and so on for other components

现在,将它们全部导出:

import Camera from './Camera'
import Keyboard from './Keyboard'

export Camera;
export Keyboard;

可以这样简化:

export Camera from './Camera'
export Keyboard from './Keyboard'

最后,使用 './components' 路径导入Camera 和其他组件:

import  Keyboard, Camera  from '../components'

注意 1: 使用这种类型的 imports/exports 会导致代码拆分或使用 Suspense/Lazy 方法出现问题。

注意 2:使用通用索引文件进行调试会更加困难。

【讨论】:

我的设置基本相同。在export Camera; 我得到Declaration or statement expected.ts(1128) 知道为什么吗? 想通了,这是因为我的 Camera.ts 是 export default class Camera ..... 所以我的 index.ts 需要是 export default as Camera from './Camera';

以上是关于导出 `index.ts` 中的所有文件的主要内容,如果未能解决你的问题,请参考以下文章

如何开玩笑地模拟文件夹中的所有文件

NextJs/TS ESM 模块导入问题

从打字稿中的索引文件导出JSON文件

所有 index.ts 的用途是啥?

如何导出已解决的承诺并再次导入

从 index.ts 以外的文件中导出类