recherche

Maison  >  Questions et réponses  >  le corps du texte

Typescript déclare dynamiquement les exportations nommées dans d.ts

J'ai créé une bibliothèque de composants pour VueJ en TypeScript et je souhaite pouvoir les utiliser globalement dans mon instance Vue (en utilisant Vue.use(library)) ou les utiliser un par un (en utilisant des importations nommées dans les composants Vue) < /p>

Cela fonctionne très bien, mais j'ai quelques problèmes avec TypeScript lorsque je veux déclarer dynamiquement tous les composants du fichier index.d.ts (car il y a beaucoup de composants et je ne veux pas le faire manuellement)

Donc ça marche :

import { Component1, Component2 } from 'my-library';

declare module 'my-library' {
  declare const lib: PluginFunction<any>;
  export default lib;

  export { Component1, Component2 } from 'my-library';
}

Mais je cherche un moyen de faire cela pour tous les composants sans les importer et les exporter un par un.

J'ai essayé quelque chose comme ceci :

...
export * from 'my-library'
...

ou

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 };
  })
}

Mais ça ne marche pas, quand j'exécute import { Component1 } from 'my-library' j'obtiens une erreur TS :

"Impossible de résoudre le symbole 'Composant1' TS2614 : Le module 'my-library' n'exporte pas le membre 'Component1'. Envisagez-vous d'utiliser « importer le composant 1 depuis « ma bibliothèque » » ? »

ps : Si j'utilise //@ts-ignore avant d'importer, tout fonctionne bien.

Des idées ?

P粉642436282P粉642436282268 Il y a quelques jours414

répondre à tous(1)je répondrai

  • P粉739886290

    P粉7398862902024-02-27 09:24:22

    Je suppose que c'est parce que TS a besoin de quelque chose pour faire une "vérification de type" lors de la construction. En d’autres termes, TS est plus restrictif que JS, qui est l’un des meilleurs exemples de perte de flexibilité, car il souhaite être défini au moment de la construction plutôt qu’à l’exécution.

    En bref, vous ne pouvez pas faire ça. La seule chose que vous pouvez faire est d'exporter tout ce qui se trouve dans l'objet saisi, mais cela signifie que lorsque vous l'importez dans un autre fichier, vous devez obtenir le tout et pas seulement une partie.

    Fichier.vue

    
    
    sssccc

    répondre
    0
  • Annulerrépondre