首页 > 其他分享 >TypeScript中never类型的实用技巧

TypeScript中never类型的实用技巧

时间:2024-06-17 15:32:59浏览次数:16  
标签:实用技巧 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/Chatdanta/p/18252501

相关文章

  • TypeScript
    目录前言一、TypeScript简介安装TypeScriptTypeScript语法基础变量函数类接口继承模块二、TypeScript类型系统数组对象枚举字面量类型推导类型保护条件类型映射类型三、TypeScript高级特性类型映射类型别名交叉类型重叠类型布尔类型不存在类......
  • Java性能优化:实用技巧与策略全解析
    引言在软件开发中,性能常常是衡量应用成功的关键因素之一。对于Java应用来说,有效的性能优化不仅可以提高用户满意度,还能降低运营成本。本文将探讨一些高效的Java性能优化技巧,并通过实际代码示例展示如何实施这些策略。垃圾回收优化垃圾收集(GC)是Java性能优化中最关键的部分。......
  • TypeScript声明文件
    TypeScript声明文件是一种用于描述JavaScript库、模块或框架的类型信息的文件。它们具有.d.ts扩展名,并包含了类型定义和类型注解,以便在TypeScript项目中使用这些JavaScript代码时提供类型检查和智能提示。声明文件的作用是为JavaScript代码提供静态类型检查的能力,使开发者能够在......
  • 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%。初次渲染快......
  • 全局 type 类型的寻找 typescript 类型 - fabric.Canvas
    全局type类型的寻找typescript类型-fabric.CanvasdeclaretypeExtCanvas=fabric.Canvas&{isDragging:boolean;lastPosX:number;lastPosY:number;};这个代码没有定义fabric.Canvas,然后看看提示说在namespace定义了。这个是子项目,没有type定义,上父项......
  • python 正则表达式使用简介和实用技巧
    元字符释义.代指任意字符^从字符串开始匹配$匹配字符串的结尾*匹配前面挨着的字符,能匹配0到无穷次+同*,能匹配1到无穷次(最少1个)?匹配前面挨着的字符,匹配0或1次{}自定义匹配次数,{1,6}匹配1到6次,{6}匹配6次(重复匹配前面挨着的字符)......
  • 编程记录:TypeScript中never类型的技巧
    技巧1当我们在一个项目中,可能会去改动一个在整个项目中应用很广泛的函数的参数类型,但是可能由于代码量比较庞大,我们不好排查改了之后哪些地方会出现问题,此时我们可以使用never类型来辅助我们的函数,当我们在原有的类型基础上添加了新的类型时,可能会导致else分支中的代码逻辑出现问......