乐趣区

关于前端:我在工作中经常用到的6个TypeScript新特性

有幻想,有干货,微信搜寻 【大迁世界】 关注这个在凌晨还在刷碗的刷碗智。

本文 GitHub https://github.com/qq449245884/xiaozhi 已收录,有一线大厂面试残缺考点、材料以及我的系列文章。

明天来介绍一下 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;
    
  }
}

采纳 ts 中简写的语法:

class Note {
  constructor(
     public title: string, 
     public content: string, 
     private history: string[]){// 这里不必在写 this.title = title}
}

它可能看上去不像是有属性的类,但它的确有,利用的是 Typescript 提供的简写模式 — 用构造函数的参数间接定义属性。

这个简写语法做了很多:

  • 申明了一个结构函数参数及其类型
  • 申明了一个同名的公共属性
  • 当咱们 new 出该类的一个实例时,把该属性初始化为相应的参数值

空值合并

??其实没啥意思,就是 Nullish Coalescing (空值合并)。听起来有点懵,咱们间接上代码

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 修饰符 混同。

这是在 TypeScript 中具备公有类字段的类:

class Animal {
  #name: string;
  constructor(theName: string) {this.#name = theName;}
}

private 关键字之上应用公有类字段的区别在于前者有更好的运行时保障。用 private 关键字申明的 TypeScript 字段将在编译后的 JavaScript 代码中成为惯例字段。另一方面,公有类字段在编译后的代码中依然是公有的。

试图在运行时拜访公有类字段将导致语法错误。咱们也应用浏览器开发工具也查看不了公有类字段。

有了公有类字段,咱们终于在 JavaScript 中失去了真正的隐衷。

命名元组类型(Labeled tuple types)

命名元组类型适须要 TypeScript 4.0 及以上版本能力应用,它极大的改善了咱们的开发体验及效率,先来看一个例子:

type Address = [string, number]

function setAddress(...args: Address) {
  // some code here
  console.log(args)
}

当咱们这样定义函数入参后,在应用函数时,编辑器的智能提醒只会提醒咱们参数类型,失落了对参数含意的形容。

为了改善这一点,咱们能够通过 Labeled tuple types,咱们能够这样定义参数:

type Address = [streetName: string, streetNumber: number]

function setAddress(...args: Address) {
  // some code here
  console.log(args)
}

这样,在调用函数时,咱们的参数就取得了相应的语义,这使得代码更加容易保护。

模板字面量类型

自 ES6 开始,咱们就能够通过模板字面量(Template Literals)的个性,用反引号来书写字符串,而不只是单引号或双引号:

const message = `text`;

正如 Flavio Copes 所言,模板字面量提供了之前用引号写的字符串所不具备的个性:

  • 定义多行字符串十分不便
  • 能够轻松地进行变量和表达式的插值
  • 能够用模板标签创立 DSL(Domain Specific Language,畛域特定语言)

模板字面量类型和 JavaScript 中的模板字符串语法完全一致,只不过是用在类型定义外面:

type topBottom = "top" | "bottom"
type leftRight = "left" | "right"

type Position = `${topBottom}-${leftRight}`

当咱们定义了一个具体的字面量类型时,TypeScript 会通过拼接内容的形式产生新的字符串字面量类型。

实用类型

TypeScript 为你提供了一组实用类型,让你在现有类型的根底上构建新的类型。有许多实用类型涵盖了不同的状况,例如抉择类型属性来复制,大写字母,或使所有的属性都是可选的。

上面是一个应用 Omit工具的例子,它复制了原始类型的所有属性,除了咱们抉择不包含的那些。

type User = {
  name: string
  age: number
  location: string
}

type MyUser = Omit<User, 'name'>

下面这些就是我工作常常应用的一部分,另外一些前面在分享,就这?

~ 完,我是刷碗智,筹备吵鸡吃,咱们下期在见。

代码部署后可能存在的 BUG 没法实时晓得,预先为了解决这些 BUG,花了大量的工夫进行 log 调试,这边顺便给大家举荐一个好用的 BUG 监控工具 Fundebug。

交换

文章每周继续更新,能够微信搜寻「大迁世界」第一工夫浏览和催更(比博客早一到两篇哟),本文 GitHub https://github.com/qq449245884/xiaozhi 曾经收录,整顿了很多我的文档,欢送 Star 和欠缺,大家面试能够参照考点温习,另外关注公众号,后盾回复 福利,即可看到福利,你懂的。

退出移动版