簡體   English   中英

如何使 4.X Typescript 項目與舊版本的 Typescript 3.X 兼容?

[英]How to make 4.X Typescript project compatible with older version of Typescript 3.X?

如何使建立在 TS 4.X 之上的 package 與 3.X 兼容? 就像,如果您有更新的版本 -> 使用新功能,否則 -> 使用anyunknown或舊版本支持的任何內容。

有沒有可能為此目的使用指令

您可以在 npm 中使用安裝 typescript 的舊版本(無論您想要什么,例如:`npm i --dev typescript@3.5.2)並嘗試修復錯誤。 然后將 typescript 版本恢復到 v4 或其他任何版本。

現在您的代碼與指定的舊 typescript 版本兼容(只需確保代碼的功能在更新時不會改變)。

在 TypeScript 中,無法在支持和不支持的功能之間切換。

例如,如果您有一個構建在TS 4.0之上且具有variadic tuple types的庫,則無法在使用 TS 3.0 的 package 中使用它。

但是,您可以維護兩個版本的分型:TS4 之前和 TS4 之后。 例如,看看lodashreact如何維護幾個版本的類型。

注意:TypeScript 具有“降級”它發出的 JavaScript 的功能,用於將來自更高版本的 ECMA 腳本標准的語言構造轉換為在舊版本中工作的構造。 (參見tsconfig 的compileOptions.target字段)。

據我所知, TypeScript本身沒有這樣的功能來降低它發出的類型文件的級別(包括撰寫本文時的指令),但是 Nathan Sanders(Definite Typed 的維護者)維護了一個開源項目, downlevel-dts ,到 downlevel.d.ts 文件,這些文件可以將類型一直降低到 typescript v3.4 語法。

您需要以某種方式將其掛接到您的構建過程中。

以下是我認為其他提議的解決方案可能存在的問題:

  • “使用較舊的 typescript 版本來發出您的打字”

    • 這假設問題的提出者正在使用 TS 編譯器從 .ts 文件中發出類型,並且如果他們手動維護它們則不起作用,這對於最初用 JS 編寫的非常大的項目通常是這種情況並且不要'沒有帶寬遷移到 TS。
    • 這可能要求您使 your.ts源代碼不使用TypeScript 語言結構,這些語言結構是在比編譯器更新的版本中引入的,您必須使用該編譯器在您想要發出的 TypeScript 語言版本中發出類型。 這並不理想,因為使用較新的語言結構編寫代碼可能會更簡潔,或者僅使用較舊的結構來做某事是不可能的。
  • “維護 TypeScript 語言版本的類型”

    • 這似乎做出了相反的假設:該項目為手動編寫的 JS 代碼維護手動鍵入文件,而不是被轉換為.js 並從.ts 文件中發出.d.ts。
    • 這是一個很大的維護負擔(手動維護.d.ts文件已經是一個很大的維護負擔。),對於小型項目來說可能是可以接受的。 但不適用於具有大型或復雜 API 表面的庫。

對於任何想要了解更多關於這個一般主題和良好實踐的無聊/熱心讀者,typescript 類型的語義版本控制在semver-ts.org上進行了非常徹底的討論,這不是一篇簡短的文章,而是一篇很好的文章。

暫無
暫無

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

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