我在TypeScript 中為VueJs 製作了一個元件庫,我希望能夠在我的Vue 實例中全域使用它們(使用Vue.use(library)
)或一一使用它們(使用Vue元件中的命名導入)
它運作得很好,但是當我想動態地聲明index.d.ts
檔案中的所有元件時,我在使用TypeScript 時遇到一些問題(因為元件很多,我不想手動執行)
所以這是有效的:
import { Component1, Component2 } from 'my-library'; declare module 'my-library' { declare const lib: PluginFunction<any>; export default lib; export { Component1, Component2 } from 'my-library'; }
但我正在尋找一種方法來對所有元件執行此操作,而無需逐個匯入和匯出它們。
我嘗試過這樣的事情:
... export * from 'my-library' ...
或
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 }; }) }
但它不起作用,當我執行 import { Component1 } from 'my-library'
時出現 TS 錯誤:
“無法解析符號“Component1” TS2614:模組「my-library」沒有匯出成員「Component1」。您是否打算使用「從「my-library」匯入 Component1」? ”
ps:如果我在導入之前使用 //@ts-ignore
,一切都會正常。
有什麼想法嗎?
我的猜測是,這是因為 TS 在建置時需要一些東西來進行「類型檢查」。換句話說,TS 比 JS 更具限制性,這是失去靈活性的主要範例之一,因為它希望在建置時而不是運行時進行定義。
簡而言之,你不能這麼做。您唯一能做的就是匯出鍵控物件中的所有內容,但這表示當您將其匯入另一個檔案時,您必須取得整個內容而不能取得其中的一部分。
檔.vue