首页 > 其他分享 >TypeScript中never类型的妙用

TypeScript中never类型的妙用

时间:2024-06-17 15:33:36浏览次数:24  
标签:妙用 TypeScript GET never value else 类型 method

本文由 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,GET,never,value,else,类型,method
From: https://www.cnblogs.com/ChatMoney/p/18243446

相关文章

  • TypeScript中never类型的实用技巧
    本文由ChatMoney团队出品妙用一当我们在一个项目中,可能会去改动一个在整个项目中应用很广泛的函数的参数类型,但是可能由于代码量比较庞大,我们不好排查改了之后哪些地方会出现问题,此时我们可以使用never类型来辅助我们的函数,当我们在原有的类型基础上添加了新的类型时,可能会导......
  • TypeScript
    目录前言一、TypeScript简介安装TypeScriptTypeScript语法基础变量函数类接口继承模块二、TypeScript类型系统数组对象枚举字面量类型推导类型保护条件类型映射类型三、TypeScript高级特性类型映射类型别名交叉类型重叠类型布尔类型不存在类......
  • TypeScript声明文件
    TypeScript声明文件是一种用于描述JavaScript库、模块或框架的类型信息的文件。它们具有.d.ts扩展名,并包含了类型定义和类型注解,以便在TypeScript项目中使用这些JavaScript代码时提供类型检查和智能提示。声明文件的作用是为JavaScript代码提供静态类型检查的能力,使开发者能够在......
  • 妙用OSGraph:发掘GitHub知识图谱上的开源故事
    1.何为OSGraph?OSGraph(OpenSourceGraph)是一个开源图谱关系洞察工具,基于GitHub开源数据全域图谱,实现开发者行为、项目社区生态的分析洞察。可以为开发者、项目Owner、开源布道师、社区运营等提供简洁直观的开源数据视图,帮助你和你的项目制作专属的开源名片、寻求契合的开发......
  • 探索Java并发容器的深坑与妙用:从同步到并发的进化之路
    探索Java并发容器的深坑与妙用:从同步到并发的进化之路在Java的世界里,并发编程一直是一个复杂而又充满挑战的领域。尤其是在处理并发容器时,不同版本、不同类型的容器带来的种种问题和优化,更是让人眼花缭乱。今天,我们将深入探讨Java并发容器的演化历程,揭示其中的深坑与妙用,帮......
  • typescript Omit Required Pick Partial等常用工具类型使用
    示例代码interfacemybasic{one:string,two:string,three:number,four:string}console.log("myts-demo")//排除参数属性interfacemy1extendsOmit<mybasic,'one'>{}typemytype=keyofmy1;typemytype2=my1;//......
  • Vue TypeScript 实战:掌握静态类型编程
    title:VueTypeScript实战:掌握静态类型编程date:2024/6/10updated:2024/6/10excerpt:这篇文章介绍了如何在TypeScript环境下为Vue.js应用搭建项目结构,包括初始化配置、创建Vue组件、实现状态管理利用Vuex、配置路由以及性能优化的方法,旨在提升开发效率与应用性能。categ......
  • TypeScript算法每日一题:最富有客户的资产总量(1672)
    作者:前端小王hs阿里云社区博客专家/清华大学出版社签约作者✍/CSDN百万访问博主/B站千粉前端up主题库:力扣题目序号:1672(简单)题目:最富有客户的资产总量给你一个mxn的整数网格accounts,其中accounts[i][j]是第i​​​​​​​​​​​​位客户在第j家银行托管的资产数......
  • vue3+TypeScript
    1.Vue3简介2020年9月18日,Vue.js发布版3.0版本,代号:OnePiece(n经历了:4800+次提交、40+个RFC、600+次PR、300+贡献者官方发版地址:Releasev3.0.0OnePiece·vuejs/core截止2023年10月,最新的公开版本为:3.3.41.1.【性能的提升】打包大小减少41%。初次渲染快......
  • msSQL 语句查询时 charindex()方法的妙用
    CHARINDEX(expressionToFind,expressionToSearch[,start_location])参数说明:expressionToFind:必需,要查找的字符串。expressionToSearch:必需,要进行查找的字符串表达式。start_location:可选,指定搜索的起始位置,默认为1。如果指定了起始位置,则从该位置开始搜索。list变......