TypeScript 3.4的生产版本已经发布,它是Microsoft键入JavaScript的超集的最新版本,它对构建和类型检查进行了改进。
在哪里下载TypeScript
您可以通过NuGet 下载TypeScript ,也可以通过NPM获取它:
npm install -g typescript
当前版本:TypeScript 3.4中的新功能
- 新的编译标志
--incremental
提供了更快的后续构建。 此标志告诉TypeScript保存有关上一次编译的项目图的信息。 当再次使用--incremental
调用TypeScript时,它将使用数据来检测最廉价的类型检查和发出项目更改的方式。 - 为ECMAScript
globalThis
全局变量引入了类型检查,为访问可在不同环境中使用的全局范围提供了一种标准方法。 - 现在,通过使用针对数组类型的
Readonly
修饰符的Readonly
的新语法,ReadonlyArray
数组类型将变得更加容易。 - 引入了对只读元组的支持; 任何元组类型都可以使用
readonly
关键字作为前缀,以使其成为只读元组。 - 映射类型中的
readonly
修饰符会自动将类似数组的类型转换为相应的只读数组类型。 - 为文字值,
const
断言引入了新的构造。 语法是类型声明,使用const
代替类型名称。 当使用const
断言构造文字表达式时,开发人员可以发出信号,表示该表达式中的文字类型均不应扩展,对象文字将获得readonly
属性,而数组文字将成为readonly
元组。 - 作为一项重大更改,现在
this
顶级类型键入为typeof globalThis
而不是any
。 因此,开发人员在访问this
和noImplicitAny
上的未知值时可能会收到错误。 - 另一个重大变化是TypeScript 3.4中改进的推论可能会产生通用函数,而不是产生和返回常量的函数。
先前版本:TypeScript 3.3中的新功能
TypeScript 3.3于2019年1月下旬发布,可监视复合项目的增量文件,可通过仅检查和重新发送已更改的文件而不是执行整个项目的完整构建来加快构建速度。 --build
模式的--watch
标志会自动利用此新功能。 在测试中,与原始--build --watch
相比,--build --watch功能使构建时间减少了50%至75%。
TypeScript 3.3还具有改进的用于调用联合类型的行为。 此外,Sublime Text的TypeScript插件现在支持在JavaScript文件中进行编辑。
先前版本:TypeScript 3.2中的新功能
TypeScript 3.2于2018年11月发布,引入了对apply
, bind
和call
方法的更严格检查。 以上是关于函数的方法使功能,例如结合this
和部分应用参数和呼叫功能与不同的值this
。 同样,调用函数可以装配有用于参数的数组。
早期版本的TypeScript缺乏对这些函数进行建模的能力; apply
, bind
和call
都键入了任意数量的参数并返回any
参数。 另外, ECMAScript 2015的箭头函数和rest / spread参数提供了新的语法,使表达这些方法中的某些方法变得更加容易。
进行更改后, bind
使用名为strictBindCallApply
的标志更严格地检查bind
, call
和apply
。 使用此标志时,可调用对象上的方法由新的全局类型CallableFunction
描述,该类型声明更严格的bind
, call
和apply
签名。 同样,对象上任何可构造但不可调用的方法都由新的全局类型NewableFunction
。
TypeScript 3.2中的其他新功能包括:
- 为BigInt启用类型检查,并在定位
esnext
时支持发出BigInt文字。 可以通过调用BigInt()
函数或通过在任何整数数字文字的末尾添加n来写出BigInt文字来访问新的原始类型bigint
。 而且,bigint
在使用typeof
运算符时会产生新的字符串类型:字符串bigint
。 BigInt支持仅适用于esnext
目标。 - 对象点差在泛型上是允许的,并使用交叉点建模。 JavaScript支持将属性从现有对象复制到新对象中,称为“传播”。
- 具有基于通用类型的对象保留的功能,其中对象保留模式创建了缺少指定属性的新对象。
- 对于
d.ts
,某些参数不再接受null 。 另外,不赞成使用某些特定于WebKit的属性。
3.2版和更高版本将仅作为MSBuild软件包提供,而不作为独立的编译器软件包提供。 MSBuild软件包取决于Node.js的全局可调用版本的存在。 装有Visual Studio 2017 15.8版及更高版本的计算机具有该Node.js版本。 TypeScript 3.2是对Visual Studio 2015具有编辑支持的最新版本。
先前版本:TypeScript 3.1中的新功能
TypeScript 3.1于2018年9月发布,在函数声明中添加了属性。 因此,对于使用函数初始化的任何函数或const
声明,类型检查器都会分析包含的作用域以跟踪添加的属性。 此更改旨在使TypeScript更加智能化模式。
使用JavaScript,函数就是对象,开发人员可以在其上添加属性。 TypeScript的传统方法是通过namespaces
构造。 但是这种结构老化得不好。 ECMAScript模块已成为在TypeScript和JavaScript中组织新代码的首选模式,但是名称空间是TypeScript特定的。 另外,名称空间不会与var
, let
或const
声明合并,这会使代码转换变得困难。 这些问题会使迁移到TypeScript变得更加困难。
TypeScript 3.1中的其他新功能包括:
- 版本重定向为
typesVersions
,这是JSON文件中的一个字段,告诉TypeScript检查当前版本的TypeScript是否正在运行。 这会影响Node模块的分辨率,并解决库维护人员必须在支持新功能和不破坏TypeScript的较旧版本之间进行选择的情况。 TypeScript的开发人员引用了一个示例,其中维护了一个使用TypeScript 3.0中unknown
类型的库。 使用早期版本的所有消费者都会被破坏。 这项新功能提供了一种为TypeScript 3.0之前的版本提供类型的方法,同时也为更高版本的类型提供了类型。 - 重构承诺的重构将返回由
.()then
和.catch()
调用链构造的承诺,以调用使用await
async
函数。 - 映射的元组和数组类型具有特色,并且
d.ts
映射类型(例如Partial
或Required
现在可以自动处理元组和数组。 - TypeScript 3.1使用WHATWG DOM规范中的Web IDL文件生成
d.ts
和其他内置的声明文件库。 这意味着lib.d.ts
将更容易保持最新,但是许多特定于供应商的类型已被删除。 此更改可能会破坏现有代码。 - 使用
typeof foo === "function"
类型防护也可能会破坏现有代码,在与由{}
,Object
或不受约束的泛型组成的可疑联合类型相交时,会提供不同的结果。
先前版本:TypeScript 3.0的新增功能
TypeScript版本3.0的密钥于2018年7月下旬发布,是一项项目引用功能,该功能使项目可以依赖其他项目。 使用此功能,tsconfig.json文件可以引用其他tsconfig.json文件。 通过指定这些依赖关系,使用TypeScript和能够理解构建顺序和输出结构的工具,可以更轻松地将代码拆分为较小的项目。 结果,构建变得更快。 开发人员还获得了对跨项目的透明导航和编辑的支持。
TypeScript 3.0中的其他新功能包括:
- 项目引用允许将输入源映射到输出。
- 添加了一组用于项目引用的API。 这些参考资料将来应该能够与一些构建协调器集成。
- 改进的错误消息提供了指导,以便开发人员可以更好地理解错误的原因和结果。
- 元组类型更丰富,因此元组可以对参数列表进行建模。 以前,TypeScript只能对参数集的顺序和计数建模。
- 支持JSX名称空间中的类型别名,
LibraryManagedAttributes
用作帮助TypeScript告诉JSX标记接受哪些属性的助手。 这与使用打字稿以帮助做出反应JavaScript UI库 ,使反应能力,行为建模,例如阵营的defaultProps
属性,在值填充的props
被省略的。 -
unknown
类型,用于描述JavaScript中功能最差的类型。 这对于API发出信号,表明类型可以是任何值,并且必须在使用之前执行类型检查非常有用。 返回值必须经过安全自省。 结果,unknown
类型不再可以在接口,类型别名或类之类的类型声明中使用。 - 为JSX添加了两个生产力功能,为JSX结束标记和可折叠的轮廓范围提供了补充。
- 命名为导入重构,以帮助开发人员使用其来自的模块和单个导入在合格的导入之间来回切换。
- 快速修复以删除无法访问的代码和未使用的标签。
- 不推荐使用的内部方法
LanguageService#getSourceFile
已被删除。 弃用的函数TypeChecker#getSymbolDisplayBuilder
和关联的接口以及弃用的函数escapeIdentifier
和unescapeIdentifier
。
先前版本:TypeScript 2.9中的新功能
2018年6月发布的候选版本通过keyof
运算符和映射的对象类型支持对象文字和数字类型。 Keyof
已经是TypeScript的一部分,它提供了一种查询现有类型的属性名称的方法。 但是此运算符早于TypeScript推理unique symbol
类型的能力,因此它从未识别符号键。 TypeScript 2.9更改keyof
的行为以考虑唯一符号和文字类型。 同样,映射的对象类型(例如Partial
和Readonly
可以识别符号和数字属性键。 用符号命名的属性将不再被删除。
在TypeScript 2.9中还包括:
- 可以将属性转换为
get-
和set-
访问器。 - 未使用的跨度报告功能使两个类似lint的标志
--noUnusedLocals
和–noUnusedParameters
可以显示为“未使用”建议跨度。 - 声明可以移动到它们自己的文件中,并且可以在项目中重命名文件,同时保持导入路径为最新状态。
- 当TypeScript能够确定正在将输出打印到终端时,
--pretty
模式可提供更全面的控制台体验,现在是默认模式。 但是,可以将其关闭。 - 类型参数可以放置在带标签的模板字符串上。
-
import(…)
类型语法,用于解决TypeScript无法引用另一个模块中的类型或模块本身的类型的缺点,而无需在文件顶部包含导入。 - 支持将泛型传递给JSX元素,并将泛型传递给带标签的模板调用。
- 为打开的文件添加建议诊断。
- 显示未使用的声明作为建议。
- 解析节点模块时,将带有modulename.json的模块名称解析为JSON文件。
TypeScript 2.9的更改可能会破坏现有代码。 Microsoft引用了这些问题以引起注意:
- 开发人员假设对于任何类型
T
,该keyof T
始终可分配给string
。 以符号和数字命名的属性使该假设无效。 有一些解决方法,例如使用Extract<keyof T, string>
来限制symbol
和number
。 开发人员还可以在--keyofStringsonly
编译器标志下转换为旧行为,该标志是过渡标志。 - REST参数上不允许使用逗号结尾; 这样做是为了符合ECMAScript JavaScript规范。
- 无约束的类型参数不能再分配给
strictNullChecks
object
。 - 类型的值
never
不再可以遍历,这可能是在捉虫子类有用的。 通过使用类型断言强制转换为any
,可以避免此行为。
先前版本:TypeScript 2.8的新功能
TypeScript 2.8版于2018年3月发布,添加了用于建模的条件类型构造。 基于JavaScript的条件语法,条件类型有助于在运行时基于类型对简单选择进行建模,同时允许更具表现力的设计时构造。 该构造采用以下形式: A extends B ? C : D
A extends B ? C : D
。 应将其读为“如果类型A可分配给B,则类型归结为C,否则变为D。” 与引入了新类型变量的new infer
关键字相比,条件类型还提供了一种从类型推断新类型的新方法。 TypeScript 2.8还提供了使用条件类型的新类型别名。
TypeScript 2.8的其他新功能包括:
From: https://www.infoworld.com/article/3249607/whats-new-in-typescript.html