TypeScript中never类型的实用技巧
本文由 ChatMoney团队出品
妙用一
当我们在一个项目中,可能会去改动一个在整个项目中应用很广泛的函数的参数类型,但是可能由于代码量比较庞大,我们不好排查改了之后哪些地方会出现问题,此时我们可以使用never类型来辅助我们的函数,当我们在原有的类型基础上添加了新的类型时,可能会导致else分支中的代码逻辑出现问题,此时我们可以向下面这样写来校验。
// 当类型Method只有GET和POST时
type Method = "GET" | "POST"
function request(method: Method) {
if (method === "GET") {
// ...
} else if (method === "POST") {
//...
} else {
// 此时的else分支是不可能执行到的,因为TypeScript会检查到所有的可能值,如果有其他值,则会报错。
const n: never = method;
}
}
// 当我们新增一个类型PUT时
type Method = "GET" | "POST" | "PUT"
function request(method: Method) {
if (method === "GET") {
// ...
} else if (method === "POST") {
//...
} else {
// 此时应该是进入到了PUT分支,所以method应该是PUT,此时把method赋值给n由于类型不符,会抛出一个编译错误
const n: never = method;
}
}
妙用二
当我们需要对一个类型取反时,可以使用类型的三目运算和类型继承来实现,代码实现如下:
// 此类型意思为,当我们传入的value类型为string时,value的类型会定义为never,此时会抛出类型错误
function myFunction<T>(value: T extends string ? never : T): T {
return value;
}
myFunction("hello"); // 报错:Argument of type 'string' is not assignable to parameter of type 'never'.ts(2345)
myFunction(123); // 不报错
myFunction(true); // 不报错
我们可以把此类型单独做成一个类型工具,效果一样
type BandType<T, U> = T extends U? never : T;
function myFunction<T>(value: BandType<T, string>): T {
return value;
}
关于我们
本文由ChatMoney团队出品,ChatMoney专注于AI应用落地与变现,我们提供全套、持续更新的AI源码系统与可执行的变现方案,致力于帮助更多人利用AI来变现,欢迎进入ChatMoney获取更多AI变现方案!
TypeScript中never类型的实用技巧的更多相关文章
- CentOS系统中的passwd命令实用技巧小结
这篇文章主要介绍了Linux系统中的passwd命令实用技巧小结,是Linux入门学习中的基础知识,需要的朋友可以参考下 先来回顾一下passwd命令的基本用法: Linux passwd命令用来 ...
- 聊聊 TypeScript 中的类型保护
聊聊 TypeScript 中的类型保护 在 TypeScript 中使用联合类型时,往往会碰到这种尴尬的情况: interface Bird { // 独有方法 fly(); // 共有方法 lay ...
- TypeScript 中枚举类型的理解?应用场景?
一.是什么 枚举是一个被命名的整型常数的集合,用于声明一组命名的常数,当一个变量有几种可能的取值时,可以将它定义为枚举类型 通俗来说,枚举就是一个对象的所有可能取值的集合 在日常生活中也很常见,例如表 ...
- typeScript中特殊类型定义
// Js八种内置类型, string, number, boolean, undefined, null, object, bigint symbol // ECMAScript内置对象 Array ...
- 5种在TypeScript中使用的类型保护
摘要:在本文中,回顾了TypeScript中几个最有用的类型保护,并通过几个例子来了解它们的实际应用. 本文分享自华为云社区<如何在TypeScript中使用类型保护>,作者:Ocean2 ...
- TypeScript Type Compatibility(类型兼容)
TypeScript中的类型兼容是基于结构归类的.在普通分类的相比之下,结构归类是一种纯粹用于将其成员的类型进行关联的方法.思考下面的代码: interface Named { name: strin ...
- TypeScript Type Innference(类型推断)
在这一节,我们将介绍TypeScript中的类型推断.我们将会讨论类型推断需要在何处用到以及如何推断. 基础 在TypeScript中,在几个没有明确指定类型注释的地方将会使用类型推断来提供类型信息. ...
- iOS开发实用技巧—Objective-C中的各种遍历(迭代)方式
iOS开发实用技巧—Objective-C中的各种遍历(迭代)方式 说明: 1)该文简短介绍在iOS开发中遍历字典.数组和集合的几种常见方式. 2)该文对应的代码可以在下面的地址获得:https:// ...
- Typescript中的可索引接口 类类型接口
/* 5.typeScript中的接口 可索引接口 类类型接口 */ /* 接口的作用:在面向对象的编程中,接口是一种规范的定义,它定义了行为和动作的规范,在程序设计里面,接口起到一种限制和规范的作用 ...
- Notepad++ 实用技巧
Notepad++是一款开源的文本编辑器,功能强大.很适合用于编辑.注释代码.它支持绝大部分主流的编程语言. 本文主要列举了本人在实际使用中遇到的一些技巧. 快捷键 自定义快捷键 首先,需要知道的是: ...
随机推荐
- 归并排序(递归)(NB)
博客地址:https://www.cnblogs.com/zylyehuo/ 递归思路 # _*_coding:utf-8_*_ import random def merge(li, low, mi ...
- 本地项目上传到gitee
前置条件:本地已经装好了GIt和GITEE有远程地址 检查本地装好了GIT:鼠标右键 检查准备好了远程:地址 本地项目拷贝到目录 D:\tmp2024-02-19\code 本地项目所在文件夹打开gi ...
- 05 过拟合(over-fitting)与正则化(regularization)
1. 什么是Overfitting 我们希望神经网络模型能够找到数据集中的一般规律,从而帮助我们预测未知数据.这个过程是通过不断地迭代优化损失函数(也就是预测值和实际值的误差)而实现的.然而随着误差进 ...
- 张高兴的大模型开发实战:(三)使用 LangGraph 为对话添加历史记录
目录 基础概念 环境搭建与配置 将对话历史存储至内存 将对话历史存储至 PostgreSQL 在构建聊天机器人时,对话历史记录是提升用户体验的核心功能之一,用户希望机器人能够记住之前的对话内容,从而避 ...
- 查缺补漏——01-BFS
01bfs 解决的是一类特殊的最段路问题. 在学习它的过程中,我更加深刻地学习到了泛化路径和 bfs. 01-BFS 是什么 首先明确,01-BFS 是一种图论算法.它解决的事最短路径问题.最短路径算 ...
- 如何开发 MCP 服务?保姆级教程!
最近这段时间有个 AI 相关的概念特别火,叫 MCP,全称模型上下文协议(Model Context Protocol).这是由 Anthropic 推出的一项开放标准,目标是为大型语言模型和 AI ...
- Source Tree ssh配置
此链接中的gitlab和github使用ssh是一样的 https://blog.csdn.net/u014222765/article/details/78909074 注意在生成公钥后,要手动复制 ...
- 🎀Excel-多表数据查找匹配(VLOOKUP)
简介 Excel的VLOOKUP函数同样可以用来查找表格中的数据.VLOOKUP(垂直查找)是一个非常有用的函数,它可以在一个表格或数据表的一列中搜索特定的值,并返回与之在同一行上的另一列中的值. 环 ...
- oracle的order by 中文排序原理
近期发现oracle的order by中文排序并不是完全按照拼音排序的 经过测试发现oracle的order by中文排序是按照中文的ASCII码排序的 查询字符ASCII码 select ascii ...
- windows10环境下,remote wsl链接wsl ubuntu使用ubuntu 开发环境,报错:VS Code server for WSL closed unexpectedly check WSL terminal for more details
报错提示这样 在windows的vscode里面的关键报错信息是:vscode wsl Unable to detect if server is already installed: Error: ...