node.js - 如何在 TypeScript npm 模組中導出類型
在 TypeScript 中,假設我想讓用戶使用我的模組的「內部」類型,這樣他們在使用我的模組時可以正確地為自己的變數指定類型——我是否只需從我的 index.ts 文件中字面上導出所有東西來實現這一點?
// index.ts
export * from './file1' // uses types/interfaces defined in file1types
export * from './file2' // uses types/interfaces defined in file2types
export * from './types/file1types'
export * from './types/file2types'
.d.ts 文件能幫助我達成這個目的嗎,還是它們只適用於非 TS 專案?tsconfig.json 的選項 declaration: true 是否能通過為每個 TS 文件生成 .d.ts 來幫助我達成這個目的?這是否是一種不需要從單一 index.ts 文件導出所有內容的替代方案?
如果 declaration: true 確實能幫助我完成這個,那麼使用者如何在 build 資料夾中使用所有這些生成的 .d.ts 檔案呢?
我非常感謝能夠得到一些關於在 TS 項目中通常如何導出類型的澄清。提前感謝。
答案#1
沒有宣告文件,你仍然可以用 TypeScript 開發一個套件,編譯它,並以 JavaScript 代碼提供給其他使用者。包含這些宣告文件也允許 TypeScript 開發者使用套件時能使用你定義的任何類型。他們在使用你的函式庫時,可以獲得更多的類型資訊,例如必要的參數類型、函數回傳類型等,以及當發生衝突時從他們的 IDE/Intellisense 收到警告。
檔案 tsconfig.json 中的 declaration: true 指示 TypeScript 編譯器輸出聲明檔 (.d.ts)。通常它們會被打包成單一檔案,例如 index.d.ts,然後在函式庫的 package.json 檔案中新增 "types": path/to/index.d.ts 欄位,以告訴 TypeScript 在用戶導入該套件時應該去哪裡尋找類型。
答案#2
對於像我一樣的人,並且已經確保在你的 tsconfig.json 中設置了 declaration: true,且你的構建過程正確地創建了對應的 .d.ts 文件到 package.json 指定的目錄,然而在外部專案測試時仍然無法訪問模組的內部類型——試著在 VSCode 中重啟 TS 伺服器(假設你使用的是 VSCode)
花了這麼多時間試圖弄清楚這個問題,結果才發現 Typescript 運行正常,而是我的 IDE 在破壞我。
