我在 TypeScript 中为 VueJs 制作了一个组件库,我希望能够在我的 Vue 实例中全局使用它们(使用 Vue.use(library)
)或一一使用它们(使用 Vue 组件中的命名导入)< /p>
它工作得很好,但是当我想动态地声明 index.d.ts
文件中的所有组件时,我在使用 TypeScript 时遇到一些问题(因为组件很多,我不想手动执行)
所以这是有效的:
import { Component1, Component2 } from 'my-library'; declare module 'my-library' { declare const lib: PluginFunction<any>; export default lib; export { Component1, Component2 } from 'my-library'; }
但我正在寻找一种方法来对所有组件执行此操作,而无需逐个导入和导出它们。
我尝试过这样的事情:
... export * from 'my-library' ...
或
import * as components from 'my-library'; declare module 'my-library' { declare const lib: PluginFunction<any>; export default lib; Object.entries(components).forEach(([componentName, component]) => { export { component as componentName }; // or // export { component }; }) }
但是它不起作用,当我执行 import { Component1 } from 'my-library'
时出现 TS 错误:
“无法解析符号“Component1” TS2614:模块“my-library”没有导出成员“Component1”。您是否打算使用“从“my-library”导入 Component1”?”
ps:如果我在导入之前使用 //@ts-ignore
,一切都会正常。
有什么想法吗?
P粉7398862902024-02-27 09:24:22
我的猜测是,这是因为 TS 在构建时需要一些东西来进行“类型检查”。换句话说,TS 比 JS 更具限制性,这是失去灵活性的主要示例之一,因为它希望在构建时而不是运行时进行定义。
简而言之,你不能这样做。您唯一能做的就是导出键控对象中的所有内容,但这意味着当您将其导入另一个文件中时,您必须获取整个内容而不能获取其中的一部分。
文件.vue
sssccc