TypeScript-3.1增加可映射元组和数组类型
TypeScript团队最近发布了TypeScript版本3.1,继3.0版本之 … Read More
Socrates
TypeScript团队最近发布了TypeScript版本3.1,继3.0版本之后添加了可映射元组和数组类型以及其他一些改进。
几乎每个JavaScript应用程序都需要映射列表中的值,这种模式在ES2015中通过剩余参数进行了简化。
TypeScript团队提供的一个常见示例:
function stringifyAll(...elements) {
return elements.map(x => String(x));
}
根据TypeScript博客所述:
stringifyAll函数可以接受任意数量的值,将每个元素转换为字符串,将每个结果放在一个新数组中,然后返回该数组。如果我们想要stringifyAll具有最通用的类型,需要将其声明为:
declare function stringifyAll(...elements: unknown[]): Array<string>;
在这个例子中,函数接受任意数量的元素,并返回一个字符串数组,但是有关元素数量的类型信息将会丢失。以前的解决方案是重载函数定义,这样很不方便:
declare function stringifyAll(...elements: []): string[];
declare function stringifyAll(...elements: [unknown]): [string];
// ... etc.
TypeScript已在之前的版本中引入了映射对象类型,但不能完美应用于元组和数组类型。新版本的变化是这个方法现在可以按预期工作,而不会抛出异常。
根据TypeScript博客所述:
从技术层面看,行为可以保持一致,我们团队的大部分人认为这种用法是没有问题的。在迭代元组和数组时,映射对象类型现在可以“做正确的事”,并没有引入用于映射元组的新概念。这意味着如果你已经在使用现有的映射类型(如Partial或者lib.d.ts中的Required),它们会立即自动处理元组和数组。虽然非常通用,但你可能会注意到这个功能意味着TypeScript现在可以更好地表达类似于Promise.all的函数。虽然这一变更尚未被包含在这一版本中,但会在不久的将来出现。
3.1版本的另一个重要补充是简化了在函数声明上指定属性。React用户对此应该很熟悉,它类似于defaultProps。
因为函数在JavaScript中也是对象,所以可以很容易地向函数添加属性。TypeScript最初的解决方案是使用命名空间,但在与ES模块一起用时带来了一些挑战,而且无法与var、let或const进行合并声明。
在TypeScript 3.1中,通过函数初始化进行的函数声明或const声明都会导致类型检查器分析父作用域,以便跟踪新添加的属性。
3.1版本还包含了很多其他较小的变更和增强功能。
在3.1版本之外,TypeScript 3.2版本将带来更多改进。最大的一个改进是函数的严格绑定、调用和方法应用,这是社区近四年前要求添加的复杂增强功能。这个增强解决了部分与变元相关的问题,变元相关问题是支持高阶函数类型最具挑战性的问题集合。BigInt支持也是3.2版本的一部分。
TypeScript是基于Apache 2许可的开源软件,可以通过TypeScript GitHub项目主页参与贡献和反馈。
相关文章
GitHub将Copilot的运行时环境迁移到Rust语言,并采用了人工智能辅助的重写技术来实现这一迁移过程。
在人工智能辅助开发的帮助下,GitHub在大约14.5周的时间里,将超过80万行用于Copilot运行时的代码从TypeScript和Node.js语言迁移到了Rust语言。这一分阶段进行的迁移过程利用了N-API接口的互操作性、自动化测试机制、人工审核流程,同时还提交了128份拉取请求,而且在此期间应用程序的更新版本也持续发布了。 作者:Leela Kumili
阅读全文
Vercel Labs推出了scriptc这款工具——它是一种能够将TypeScript代码转换为原生代码的编译器,使用这种编译器后就不再需要依赖JavaScript引擎了。
Vercel Labs推出了一种名为scriptc的实验性编译器,这种编译器能够将TypeScript代码转换为体积较小的原生可执行文件,而且无需依赖Node.js、V8或任何JavaScript引擎。它使用TypeScript编译器进行类型检查,最终可以生成C语言代码或WebAssembly代码。初步测试结果显示,与Node.js相比,scriptc的启动速度更快,内存占用也更低,不过其执行效率略低。 作者:Daniel Curtis
阅读全文
tsgolint已发展至稳定版本v7,现在Oxlint已经能够使用这种基于Go语言实现的、具备类型检测功能的代码检查工具了。
tsgolint发布了稳定版的v7版本,该版本利用Go语言的原生性能优化了TypeScript的代码检查功能。它支持基于类型信息的代码检查,通过“typescript-go”编译器来运用TypeScript的语义分析机制;而Oxlint则负责配置管理及文件路径的检测工作。这个新版本与TypeScript 7.0.2兼容,能够处理61条类型检查规则中的59条,并且其性能明显优于ESLint。 作者:Daniel Curtis
阅读全文