今天,我将介绍一些我在日常工作中经常使用的 TypeScript 的新特性和发展。
在构造函数中直接定义属性
在 TypeScript 中,你可以通过构造函数参数直接定义属性。让我们先看看之前的方法:
class Note {
public title: string;
public content: string;
private history: string[];
constructor(title: string, content: string, history: string[]) {
this.title = title;
this.content = content;
this.history = history;
}
}
使用 TypeScript 的简写语法:
class Note {
constructor(
public title: string,
public content: string,
private history: string[]
){
// 这里不再需要写 'this.title = title' 了。
}
}
乍一看可能不像是一个有属性的类,但它确实有,利用了 TypeScript 的简写形式 —— 通过构造函数参数直接定义属性。
这种简写语法完成了几件事情:
- 声明了一个构造函数参数及其类型。
- 声明了一个同名的公共属性。
- 在我们创建这个类的实例时,用相应的参数值初始化这个属性。
空值合并操作符
实际上,?? 并不意味着太多;它只是空值合并操作符。这听起来可能有点令人困惑,所以让我们直接看代码。
const i = undefined
const k = i ?? 5
console.log(k) // 5
// 3.9.2 编译
const i = undefined;
const k = i !== null && i !== void 0 ? i : 5;
console.log(k); // 5
这时,你可能会想,‘为什么不这样做?’
let k = i || 5
虽然这种方法可行,但你不觉得它有点不精确吗?如果 ‘i’ 是 0 呢?
私有类字段
TypeScript 3.8 将支持 ECMAScript 私有字段,所以不要将它们与 TypeScript 的 ‘private’ 修饰符混淆。