Ich habe eine Komponentenbibliothek für VueJs in TypeScript erstellt und möchte sie global in meiner Vue-Instanz verwenden (mit Vue.use(library)
) oder einzeln verwenden (mithilfe benannter Importe in Vue-Komponenten) < /p>
Es funktioniert gut, aber ich habe einige Probleme mit TypeScript, wenn ich alle Komponenten in der index.d.ts
-Datei dynamisch deklarieren möchte (da es viele Komponenten gibt und ich es nicht manuell tun möchte)
So funktioniert das:
import { Component1, Component2 } from 'my-library'; declare module 'my-library' { declare const lib: PluginFunction<any>; export default lib; export { Component1, Component2 } from 'my-library'; }
Aber ich suche nach einer Möglichkeit, dies für alle Komponenten zu tun, ohne sie einzeln zu importieren und zu exportieren.
Ich habe so etwas versucht:
... export * from 'my-library' ...
oder
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 }; }) }
Aber es funktioniert nicht. Wenn ich import { Component1 } from 'my-library'
ausführe, erhalte ich den TS-Fehler:
"Symbol „Komponente1“ konnte nicht aufgelöst werden TS2614: Das Modul „my-library“ exportiert das Mitglied „Component1“ nicht. Planen Sie die Verwendung von „Komponente1 aus „Meine Bibliothek“ importieren“?
ps: Wenn ich //@ts-ignore
vor dem Import verwende, funktioniert alles einwandfrei.
Irgendwelche Ideen?
我的猜测是,这是因为 TS 在构建时需要一些东西来进行“类型检查”。换句话说,TS 比 JS 更具限制性,这是失去灵活性的主要示例之一,因为它希望在构建时而不是运行时进行定义。
简而言之,你不能这样做。您唯一能做的就是导出键控对象中的所有内容,但这意味着当您将其导入另一个文件中时,您必须获取整个内容而不能获取其中的一部分。
文件.vue