Rumah  >  Soal Jawab  >  teks badan

Skrip taip secara dinamik mengisytiharkan eksport bernama dalam d.ts

Saya membuat perpustakaan komponen untuk VueJs dalam TypeScript dan saya mahu dapat menggunakannya secara global dalam contoh Vue saya (menggunakan Vue.use(library)) atau menggunakannya satu persatu (menggunakan import bernama dalam komponen Vue) < /p>

Ia berfungsi dengan baik, tetapi saya mempunyai beberapa masalah menggunakan TypeScript apabila saya ingin mengisytiharkan semua komponen dalam fail index.d.ts secara dinamik (kerana terdapat banyak komponen dan saya tidak mahu melakukannya secara manual)

Jadi ini berfungsi:

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

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

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

Tetapi saya sedang mencari cara untuk melakukan ini untuk semua komponen tanpa mengimport dan mengeksportnya satu demi satu.

Saya mencuba sesuatu seperti ini:

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

atau

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

Tetapi ia tidak berfungsi, apabila saya melaksanakan import { Component1 } from 'my-library' Saya mendapat ralat TS:

"Tidak dapat menyelesaikan simbol 'Komponen1' TS2614: Modul 'my-library' tidak mengeksport ahli 'Component1'. Adakah anda merancang untuk menggunakan "import Component1 daripada "my-library""? ”

ps: Jika saya menggunakan //@ts-ignore sebelum mengimport, semuanya berfungsi dengan baik.

Ada idea?

P粉642436282P粉642436282236 hari yang lalu390

membalas semua(1)saya akan balas

  • P粉739886290

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

    Tekaan saya ialah ini kerana TS memerlukan sesuatu untuk melakukan "type checking" semasa membina. Dalam erti kata lain, TS lebih ketat daripada JS, yang merupakan salah satu contoh utama kehilangan fleksibiliti, kerana ia mahu ditakrifkan pada masa binaan dan bukannya masa jalan.

    Ringkasnya, anda tidak boleh melakukan ini. Satu-satunya perkara yang boleh anda lakukan ialah mengeksport segala-galanya dalam objek yang dikunci, tetapi ini bermakna apabila anda mengimportnya ke dalam fail lain, anda perlu mendapatkan keseluruhannya dan bukan hanya sebahagian daripadanya.

    File.vue

    
    
    sssccc

    balas
    0
  • Batalbalas