Skrip taip secara dinamik mengisytiharkan eksport bernama dalam d.ts
P粉642436282
P粉642436282 2024-02-26 11:58:58
0
1
454

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粉642436282
P粉642436282

membalas semua(1)
P粉739886290

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
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan