最新版本的 TypeScript 2.8 包括许多主要功能和错误修复,其中最重要的是添加了条件类型,它允许开发人员根据其他类型的特征为变量选择合适的类型。
条件类型最好与形式参数结合使用。 如果框架始终重复相同的可选代码,它可能会变得很麻烦。 与 JavaScript 在运行时根据特定值做出决策类似,TypeScript 的条件类型可以根据其他类型的特征做出决策。
TypeScript 团队举了一个例子,用更灵活的套接字替换了原来冗长的 API:
原来的:
interface Id { id: number, /* other fields */ } interface Name { name: string, /* other fields */ } declare function createLabel(id: number): Id; declare function createLabel(name: string): Name; declare function createLabel(name: string | number): Id | Name;
用。。。来代替:
type IdOrName = T extends number ? Id : Name; declare function createLabel(idOrName: T): T extends number ? Id : Name;
条件类型提供了infer关键字来推断类型typescript 条件类型,用于替代自动类型。 因此,TypeScript 提供了一个示例,其中他们创建了一个名为 Flatten 的类型,该类型将字段转换为他们需要的元素类型:
type Flatten = T extends any[] ? T[number] : T;
如果使用infer关键字,可以将里面的代码简化为:
type Flatten = T extends Array ? U : T;
条件类型还为联合类型带来了改进,现在可以根据条件类型进行分配。
此外,TypeScript 还删除了几个新的类型别名(Exclude、Extract、InstanceType、NonNullable、ReturnType),这些别名也基于条件类型。 因此,TypeScript 团队可以更有效地将其他类型模式直接添加到语言中。
TypeScript 2.8 还删除了一个新的 --emitDeclarationOnly 标志,该标志将 TypeScript 定义文件与 JavaScript 文件分开typescript 条件类型,从而改进了使用 Babel 7 转译 TypeScript 代码的过程。
此版本还为 React 和 JSX 用户带来了有关编译注释和 JSX 模块解析的一些改进。
现在可以使用-operator 或新的Required 类型删除标识符。
其他小的改进包括:用于清理 ES 模块导出的辅助工具以及改进对未初始化类属性的检测。
总体而言,TypeScript 2.8 带来了多项改进,其中大部分都是基于新引入的条件类型,现在可以定义更复杂的类型。
您可以使用 npm install -g typescript 安装最新的 TypeScript 2.8,或直接从 GitHub 下载。 TypeScript 2.9 正在开发中,预计将于 5 月下旬发布。