本文整理自网络,侵删。
TypeScript 3.1介绍
元组和数组上的映射类型
在 TypeScript 3.1 中,元组和数组上的映射对象类型现在产生新的元组/数组,而不是创建一个新的类型,其中的成员,比如push()
,pop()
和length
将被转换。例如:
type MapToPromise<T> = { [K in keyof T]: Promise<T[K]> };
type Coordinate = [number, number]
type PromiseCoordinate = MapToPromise<Coordinate>; // [Promise<number>, Promise<number>]
MapToPromise
使用一种类型T
,当该类型是一个元组,例如Coordinate
,它只转换数字属性。在[number, number]
中,有两个数字命名的属性:0
和1
。当给出这样的元组时,MapToPromise
将创建一个新的元组,其中0
和1
属性是原始类型的Promise
s。因此,结果类型PromiseCoordinate
最终会得到类型[Promise<number>, Promise<number>]
。
函数的属性声明
TypeScript 3.1 能够在函数声明和const
-declared functons 上定义属性,只需在同一范围内分配这些函数的属性即可。这允许我们编写规范的JavaScript代码而不求助于namespace
。例如:
function readImage(path: string, callback: (err: any, image: Image) => void) {
// ...
}
readImage.sync = (path: string) => {
const contents = fs.readFileSync(path);
return decodeImageSync(contents);
}
在这里,我们有一个以非阻塞异步方式读取图像的readImage
函数。除了readImage
外,我们在readImage
提供了一个方便的函数,名为readImage.sync
。
虽然ECMAScript导出通常是提供此功能的更好方式,但这种新的支持允许使用此样式编写的代码“仅仅工作” TypeScript。另外,这种属性声明方法让我们在React无状态功能组件(SFCs)上表达常用模式,例如defaultProps
和propTypes
。
export const FooComponent => ({ name }) => (
<div>Hello! I am {name}</div>
);
FooComponent.defaultProps = {
name: "(anonymous)",
};
更具体地说,同态映射类型类似于上面的形式。
使用 typesVersions 进行版本选择
来自社区的反馈以及相关的经验告诉我们,利用最新的TypeScript功能同时也容纳旧版本的用户是很困难的。TypeScript引入了一项名为typesVersions
的新功能,以帮助满足这些方案。
相关阅读 >>
更多相关阅读请进入《typescript》频道 >>

Vue.js 设计与实现 基于Vue.js 3 深入解析Vue.js 设计细节
本书对 Vue.js 3 技术细节的分析非常可靠,对于需要深入理解 Vue.js 3 的用户会有很大的帮助。——尤雨溪,Vue.js作者