typescript基础之never

2023-11-11

TypeScript 的 never 类型是一种特殊的类型,它表示的是那些永远不存在的值的类型。例如,一个抛出异常或无限循环的函数的返回值类型就是 never,因为它们永远不会返回任何值。never 类型是所有类型的子类型,也就是说,任何类型都可以赋值给 never 类型,但是 never 类型只能赋值给自己和 any 类型。never 类型有以下的特点和用途https://juejin.cn/post/7201048368389914682:

•  never 类型不能被实例化,也不能有任何值,甚至 undefined 也不行。

•  never 类型可以用来表示不可能发生的情况,例如在 switch 语句中的 default 分支,或者在类型保护中排除掉所有可能的情况。

•  never 类型可以用来进行疲劳性检查(exhaustiveness check),也就是检查是否所有的分支都被覆盖到了,如果有遗漏,就会报错。

下面是一些使用 never 类型的例子:

// 抛出异常的函数的返回值类型是 never
function throwError(message: string): never {
    throw new Error(message);
}

// 无限循环的函数的返回值类型也是 never
function loopForever(): never {
    while (true) {}
}

// 使用 never 类型来表示不可能发生的情况
type Direction = "up" | "down" | "left" | "right";

function move(direction: Direction) {
    switch (direction) {
    case "up":
        // do something
        break;
    case "down":
        // do something
        break;
    case "left":
        // do something
        break;
    case "right":
        // do something
        break;
    default:
        // 如果有遗漏的情况,就会报错
        const invalid: never = direction;
        // Error: Type 'string' is not assignable to type 'never'
    }
}

// 使用 never 类型来进行疲劳性检查
class ExhaustiveError extends Error {
    constructor(value: never, message?: string) {
        super(message);
    }
}

function checkExhaustive(value: Direction) {
    switch (value) {
    case "up":
        // do something
        break;
    case "down":
        // do something
        break;
    default:
        // 如果有遗漏的情况,就会抛出异常
        throw new ExhaustiveError(value);
        // Error: Argument of type 'string' is not assignable to parameter of type 'never'
    }
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

typescript基础之never 的相关文章

随机推荐

  • Javascript数组排序sort方法和自定义排序方法

    前言 针对一个数组进行排序 一个很常见的需求 尤其在后端 当然 前端也是有这个需求的 当然 数组排序 是有现成的方法的 就是sort 方法 我们先开看下这个 标准答案 sort方法 var arr 45 98 67 57 85 6 58 8
  • babel6.X、babel7.x、 babel8.x用法

    babel6 x使用方法 需要安装的包 npm install babel loader save npm install babel core save npm install babel preset es2015 save npm i
  • Jmeter2-手机验证码方式进行用户登录

    使用手机验证码实现登录 调用了两个接口 一是发送短信验证码 二是用户登录 思路 1 使用CSV Data Set Config参数化 2 获取时间戳 3 发送短信验证码 4 使用BeanShell取样器从redis缓存中获取短信验证码 5
  • Grafana与python后端通过get请求进行通信

    插件配置请参考 Grafana获取URL地址中的json数据 Grafana下载如下插件 文章目录 模拟URL路由 配置Grafana插件 效果展示 模拟URL路由 from fastapi import FastAPI Query imp
  • postman请求一个url,could not get any response

    postman请求一个url不通 浏览器可以访问通 preface 现象 排除问题 总结 preface 最近 同事使用 postman 遇到一个问题 url 请求不通 could not get any response 现象 排除问题
  • 使用 Iceberg on Kubernetes 打造新一代云原生数据湖

    背景 大数据发展至今 按照 Google 2003年发布的 The Google File System 第一篇论文算起 已走过17个年头 可惜的是 Google 当时并没有开源其技术 仅仅 是发表了三篇技术论文 所以回头看 只能算是揭开了
  • STM32速成笔记—ADC

    文章目录 一 什么是ADC 二 ADC的用途 三 STM32F103ZET6的ADC 3 1 ADC通道对应引脚 3 2ADC时钟 3 3 ADC工作模式 3 4 ADC转换时间 3 5 ADC校准 3 6 ADC转换结果与实际电压的换算
  • js中的对象和函数的彻底理解

    在js中对象就是神一般的存在 什么都是对象 包括函数 你就这么理解好了 函数是用来实现具体功能的代码 用一种方式把他们组织起来 就是函数了 对象是有属性和方法的一个东西 在对象中的函数就变成了方法 刚学习js不用太纠结这些概念性的东西吧 慢
  • Python学习第十六天——数据库基础与MySQL基础操作

    数据库分类 1 关系型数据库 有固定的表结构 并且表与表之间可以建立关系 常见数据库 MySQL PostgreSQL Oracle db2 sqlite sqlserver access mariadb 2 非关系型数据库 没有固定的表结
  • EMWIN密码验证窗口创建

    EMWIN密码验证窗口创建 调用接口 file PasswdCheck c date 2020 7 6 author aron566 copyright None brief 通用密码验证页面 details None version V1
  • 买不到的数目 遍历法和公式推导法(第四届蓝桥杯省赛C++A组,第四届蓝桥杯省赛JAVAC组)

    突然决定要参加蓝桥 已经超级久没复习C C 的我考前还是决定打几道题捡一捡C C 的语法和思路 2023年蓝桥的题之后会出 因为 AcWing上还没有出可以测试的程序 也没把握说自己考场上做的就是对的 目录 题目 思路 代码 题目 小明开了
  • 华为od机试题5 真题

    华为od机试题 真题 45 满足规则的数组组合 44 最长连续子序列的和等于输入值 43 整数编码 42 输出指定格式字符 40 小朋友分班 39 数列解析 38 url拼接 36 满足最低能力值的数量 以下题目附带Java解法 是我个人写
  • shell中的求幂

    小白今天突然想用shell来求一下2的32次幂 一时竟想不出求解办法 上网搜了一下 操作之后 发现很简单 如下 oracle linux101 gt echo 2 32 bc l 由此可得 bc并不支持幂的求法 standard in 1
  • JVM概述

    1 什么是JVM JVM是Java Virtual Machine Java虚拟机 的缩写 JVM是一种用于计算设备的规范 它是一个虚构出来的计算机 是通过在实际的计算机上仿真模拟各种计算机功能来实现的 引入Java语言虚拟机后 Java语
  • Vue项目打包后,修改请求后端的地址

    目录结构 其中public文件夹中的东西会原封不动的打包 因此在里面新建一个webConfig json baseURL http 6060 socketURL timeout 10000 在main js中设置 import axios
  • git 小乌龟 配置_小乌龟(TortoiseGit)基本使用详解

    1 环境安装 Git最新版下载地址 https gitforwindows org TortoiseGit Git客户端 32 64位最新版及对应的语言包下载地址 https tortoisegit org download 安装的方法 一
  • GitHub copilot用不了,有什么好的替代?

    如果你无法使用GitHub Copilot 以下是一些替代方案 Visual Studio IntelliSense 如果你使用Visual Studio Code作为开发环境 可以安装IntelliSense插件 它提供了类似的智能代码补
  • ChatGPT在GIS领域应用初测

    1 引言 ChatGPT是由OpenAI开发的一种大型语言模型 它使用了Transformer架构 在大量现实世界文本数据上训练 以捕捉人类语言的复杂性和多样性 能够实现许多人工智能语言处理任务 如回答问题 进行翻译 修改代码 生成文档 文
  • Cisco UC 项目常见问题及解决方法

    第一大类 Callmanager 1 OS product key BTOO VQES CCJU IEBI 2 增加subscriber 服务器 1 在publisher上增加一个server 2 在subscriber上手动启动需要的服务
  • typescript基础之never

    TypeScript 的 never 类型是一种特殊的类型 它表示的是那些永远不存在的值的类型 例如 一个抛出异常或无限循环的函数的返回值类型就是 never 因为它们永远不会返回任何值 never 类型是所有类型的子类型 也就是说 任何类