簡體   English   中英

typescript:使用typescript項目中的聲明文件全局暴露類型

[英]typescript: using declaration files in a typescript project to expose types globally

我最近開始使用 typescript。我有一個 typescript 項目設置,其中有很多用 typescript 編寫的 React 組件。這些 typescript 組件通常導出組件本身,為了方便開發,我提取了這個 typescript 組件所需的所有類型到一個單獨的文件。 現在通常你必須在你的組件中導入這些類型才能使用它,但由於它很麻煩,團隊中的一些人想出了一個想法,將這些包含類型的單獨文件命名為types.d.ts (或 whatever.d .ts)。 這使得類型在整個項目中全局可用,而無需在任何地方顯式導入類型。

現在,我知道只有在我的 typescript 項目中使用 javascript 組件,並且我希望對該 javascript 組件進行類型檢查時,才需要類型聲明文件。 在這種情況下,我可以從外部獲取類型聲明文件(如 DefinitelyTyped),或者我可以創建一個本地聲明文件。 這不是我在這里使用聲明文件的目的。

但我想了解這種用法有什么問題?

  • 全局公開所有類型是否錯誤(請注意,這些類型中的大多數僅在組件內部需要,使用該組件的其他組件僅需要一些類型)?
  • 編譯器或 typescript 設置是否會因此出現問題?
  • 我讀過有關生成聲明文件的編譯器選項,此設置會干擾它嗎?

注意:這個名為 d.ts 的單獨文件並不真正遵循聲明文件可能需要的任何特定指南。 這只是一些常規的接口聲明

一些觀察:

  • .ts文件(或d.ts文件)中,如果沒有頂級導出,它將被視為全局腳本(類似於它在 javascript 中的工作方式)並且腳本中的所有內容都將在全局可用。 在我的案例中,這就是類型在全球范圍內公開的方式(同樣,它不必是.d.ts文件)

  • 如果你有一個ts文件和一個同名的d.ts文件,編譯器會忽略d.ts文件,這就是為什么不能使用Component.d.ts公開Component.tsx類型的原因(你需要將d.ts文件命名為其他名稱)

  • 當導入沒有類型信息的外部模塊時,typescript 建議添加一個帶有declare module moduleNamed.ts文件,除此之外,您還可以只添加一個 regular.d.ts 文件,並在moduleName/index.d.ts

所以,回答我的問題:

  • 公開應用程序中全局使用的所有類型可能並沒有錯,但是您必須處理任何命名空間/命名沖突。 在這種情況下,不需要使用d.ts文件,此設置與.ts文件一起工作也可以在全局范圍內公開類型。 實現此目的的另一種方法是從各自的文件中導出類型並在需要時導入它們。

  • 在此設置中,編譯器可能出現的唯一問題是當.d.ts文件的名稱與.ts文件相同時,在這種情況下, .ts文件將覆蓋並且.d.ts中的類型將不可用全球范圍內。

  • 編譯器從ts文件生成聲明文件,如果你需要發布你的類型,那是最需要的。 在我們的例子中,類型是內部的,我們實際上不需要生成聲明。 正如所討論的,我們的用法不依賴於文件是聲明文件,它在.ts文件中也能正常工作,我們不應該為此使用.d.ts文件。 所以,不,不會有任何影響。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM