繁体   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