[TypeScript] Use TypeScript’s never Type for Exhaustiveness Checking

TypeScript 2.0 introduced a new primitive type called never, the type of values that never occur. It helps model the completion behavior of functions more accurately and can also be used for exhaustiveness checking.

In somecases, never type can be useful as well.

enum ShirtSize {
  XS,
  S,
  M,
  L,
  XL
}

function assertNever(value: never): never {
  // throw Error(`Unexpected value ‘${value}‘`)
  // Adjusted for plunker output
  console.log(Error(`Unexpected value ‘${value}‘`));
}

function prettyPrint(size: ShirtSize) {
  switch (size) {
      case ShirtSize.S: console.log("small");
      case ShirtSize.M: return "medium";
      case ShirtSize.L: return "large";
      case ShirtSize.XL: return "extra large";
      // [ts] Argument of type ‘ShirtSize.XS‘ is
      // not assignable to parameter of type ‘never‘.
      default: return assertNever(size);
  }
}

prettyPrint(ShirtSize.S)
prettyPrint(ShirtSize.XXL)

In the example, we want to make sure that every time in the enum ShirtSzie has been handled by the ‘prettyPrint‘ function.

But sometime, we might miss one case. That‘s where ‘assertNever‘ function can help to make sure, we have gone though all the cases.

时间: 2024-10-24 16:28:54

[TypeScript] Use TypeScript’s never Type for Exhaustiveness Checking的相关文章

Learining TypeScript (一) TypeScript 简介

Learining TypeScript (一) TypeScript 简介 一.TypeScript出现的背景    2 二.TypeScript的架构    2 1.    设计目标    2 2.    TypeScript组件    4 三.TypeScript语言特性    4 1.类型    7 2.变量.基本类型和运算符    8 3.流程控制语句    12 4.函数    12 5.类    13 6.接口    14 7.命名空间    15 四.小结    16 一.Typ

[TypeScript] Create Explicit and Readable Type Declarations with TypeScript mapped Type Modifiers

Using the optional “+” sign together with mapped type modifiers, we can create more explicit and readable type declarations. We can also use the “-” (minus) sign to remove optional declarations from properties. For example, we have an interface: inte

【TypeScript】TypeScript 学习 4——模块

前端数据验证在改善用户体验上有很大作用,在学了之前的知识的时候,我们很可能会写出以下代码: interface StringValidator { isAcceptable(s: string): boolean; } var lettersRegexp = /^[A-Za-z]+$/; var numberRegexp = /^[0-9]+$/; class LettersOnlyValidator implements StringValidator { isAcceptable(s: st

【TypeScript】TypeScript 学习 5——方法

在 JavaScript 中,有两种方式定义方法. 1.命名的方法 function add(x,y){ return x+y; } 2.匿名方法 var myAdd = function(x,y) { return x+y;}; 在 TypeScript 中,也兼容上面两种定义方式,但是,既然我们用的是 TypeScript,那么肯定要强于本来的定义方式. 1.类型化方法 function add(x:number, y:number):number{ return x+y; } var my

【TypeScript】TypeScript 学习 3——类

在 EcmaScript 6 中,我们将会拥有原生的类,而不是像现在通过原型链来实现.使用 TypeScript 我们能提前体验这一特性. 首先来看看一个简单的例子: class Greeter { greeting: string; constructor(message: string) { this.greeting = message; } greet() { return "Hello, " + this.greeting; } } var greeter = new Gre

【TypeScript】TypeScript 学习 1——基本类型

TypeScript 是 JavaScript 的超集,TypeScript 经过编译之后都会生成 JavaScript 代码.TypeScript 最大的特点就是类型化,因此才叫做 TypeScript.比起弱类型的 JavaScript,类型化的 TypeScript 显得更加容易维护. 在 TypeScript 中一共有 7 种基本类型. 1.boolean var isDone: boolean = false; 2.number 代表 JavaScript 中的数字.在 JavaScr

[TypeScript] Installing TypeScript and Running the TypeScript Compiler (tsc)

This lesson shows you how to install TypeScript and run the TypeScript compiler against a .ts file from the command line. install: npm install -g typescript tsc -v // version app.ts: class Person{} RUN: tsc app.ts You will see the js file with the sa

TypeScript(一)TypeScript培养类型思维

TypeScript培养类型思维 前言:当你点开这篇文章时,我相信你已经在很多地方都已经听说过或者见过TypeScript了.但是可能对TypeScript依然有很多问号:TypeScript到底是什么?为什么每个人都在说TypeScript怎么怎么好,到底好在哪里?Angular.Vue3接连使用TypeScript进行了重构是否意味着我们必须掌握TypeScript,它们又为什么要选择TypeScript?我需要什么样的基础才能学会或者说学好TypeScript呢?没有关系,在这个章节中我们

TypeScript TSLint(TypeScript代码检查工具)

TSLint是TypeScript代码的样式风格检查工具.类似于JavaScript的ESLint,或者Ruby的Rubocop. 配置TSLint TSLint是一个外部工具,我们需要进行一次安装工具的流程 #初始化package.json npm init yarn add ts-node typescript --dev yarn add tslint --dev 安装完成后,使用命令初始化TSLint的配置 yarn tslint --init 此时,项目中会自动新增一个文件tslint