在用了这些 TypeScript 特性后,我离不开它们了!

183 阅读1分钟

今天,我将介绍一些我在日常工作中经常使用的 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’ 修饰符混淆。