Typescript deklariert benannte Exporte dynamisch in d.ts
P粉642436282
P粉642436282 2024-02-26 11:58:58
0
1
455

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?

P粉642436282
P粉642436282

Antworte allen(1)
P粉739886290

我的猜测是,这是因为 TS 在构建时需要一些东西来进行“类型检查”。换句话说,TS 比 JS 更具限制性,这是失去灵活性的主要示例之一,因为它希望在构建时而不是运行时进行定义。

简而言之,你不能这样做。您唯一能做的就是导出键控对象中的所有内容,但这意味着当您将其导入另一个文件中时,您必须获取整个内容而不能获取其中的一部分。

文件.vue



Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage