TypeScript 4.1发布,新增模板字面量类型

{"type":"doc","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"TypeScript团队发布了"},{"type":"link","attrs":{"href":"https:\/\/devblogs.microsoft.com\/typescript\/announcing-typescript-4-1\/","title":null,"type":null},"content":[{"type":"text","text":"TypeScript 4.1"}]},{"type":"text","text":",其中包括功能强大的模板字面量类型、映射类型的键重映射以及递归条件类型。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"模板字面量类型在社区中得到了非常热烈的响应。这个新特性提供了使用普通字符串字面量类型作为其他类型定义的能力,这让创建和执行模板语法变得很容易。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"模板字符串字面量也可以动态生成,并根据模板字符串中的替换位置进行推断。为了进一步支持模板字符串字面量,TypeScript还添加了新的实用类型别名来修改字母大小写:Uppercase、Lowercase、Capitalize和Uncapitalize。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"社区提供了很多有趣的模板字符串文本示例,包括querySelector、路由器参数解析、表达式解析、JSON解析和序列化、GraphQL类型的AST、SQL查询验证、CSS解析、游戏、"},{"type":"link","attrs":{"href":"https:\/\/github.com\/kkuchta\/TSpell","title":null,"type":null},"content":[{"type":"text","text":"拼写检查"}]},{"type":"text","text":",等等。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Haskell和PureScript也有类似的特性,现在TypeScript也支持它们了。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"TypeScript 4.1还通过添加键重映射对映射类型进行了改进。映射类型以前仅限于带有已知建的新对象类型,现在支持创建新键或过滤已有的键。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"TypeScript 4.1的另一个重要新增功能是递归条件类型,可以更容易地支持数组或复杂promise树的扁平化方法。条件类型现在可以立即在分支中引用自己,从而更容易创建递归类型别名。TypeScript团队警告说,这个模式应该谨慎使用,避免递归类型检查的速度变慢,而且如果超出了受支持的递归深度,TypeScript编译器将会抛出编译时错误。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"TypeScript 4.1添加了一个新的编译器标志--noUncheckedIndexedAccess,用来识别潜在未定义属性。这个新特性不会自动包含在--strict标记中,因为它在一些常见场景中会改变行为,比如遍历for循环的索引时。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"有两个新的针对React 17用户的JSX选项,可以更好地支持生产和开发编译,分别是react-jsx和react-jsxdev。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在升级到TypeScript 4.1时,需要考虑以下几个重大变更:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"内置的lib.d.ts自动生成DOM类型的行为发生了变化,并移除了Reflect.enumerateAPI,因为ES2016已将其弃用。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"类的abstract成员不再被标记为async。调用者只关心返回类型,因此不再存在将abstract成员指定为async的值。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"any和unknown类型现在会在错误的位置传播。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"resolve的参数现在在promise中是必需的。TypeScript 4.1包含了一个快速修复,以简化升级过程。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"条件扩展可创建可选属性。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"不匹配的参数不再相关。"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"TypeScript 4.2的相关工作已经在进行中,预计将于2021年2月完成。TypeScript 4.2的内容包括广义索引签名、元组类型中的前\/中剩余元素、--noImplicitOverride、--noPropertyAccessFromIndexSignature、静态索引签名、typeof class、更快的编译时迭代,以及编辑器和生产力方面的进一步改进。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"TypeScript采用了Apache 2开源许可,欢迎开发者通过"},{"type":"link","attrs":{"href":"https:\/\/github.com\/Microsoft\/TypeScript\/","title":null,"type":null},"content":[{"type":"text","text":"TypeScript GitHub项目"}]},{"type":"text","text":"参与贡献和反馈,并遵循"},{"type":"link","attrs":{"href":"https:\/\/github.com\/Microsoft\/TypeScript\/blob\/master\/CONTRIBUTING.md","title":null,"type":null},"content":[{"type":"text","text":"TypeScript贡献指南"}]},{"type":"text","text":"和"},{"type":"link","attrs":{"href":"https:\/\/opensource.microsoft.com\/codeofconduct\/","title":null,"type":null},"content":[{"type":"text","text":"微软开源行为准则"}]},{"type":"text","text":"。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"原文链接"},{"type":"text","text":":"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"link","attrs":{"href":"https:\/\/www.infoq.com\/news\/2020\/12\/typescript-4-1-template-literal\/","title":null,"type":null},"content":[{"type":"text","text":"TypeScript 4.1 Adds Template Literal Types"}]}]}]}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章