首页 > 编程语言 >编程记录:TypeScript中never类型的技巧

编程记录:TypeScript中never类型的技巧

时间:2024-06-05 11:01:19浏览次数:37  
标签:TypeScript GET 编程 value else never 类型 method

技巧1

当我们在一个项目中,可能会去改动一个在整个项目中应用很广泛的函数的参数类型,但是可能由于代码量比较庞大,我们不好排查改了之后哪些地方会出现问题,此时我们可以使用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;
    }
  }

技巧2

当我们需要对一个类型取反时,可以使用类型的三目运算和类型继承来实现,代码实现如下:

// 此类型意思为,当我们传入的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.cn获取更多AI变现方案!

标签:TypeScript,GET,编程,value,else,never,类型,method
From: https://www.cnblogs.com/Chatdanta/p/18232584

相关文章

  • 2024年03月 GESP等级认证Python编程(一级)试题解析
    【单选题】(每题2分)1、小杨的父母最近刚刚给他买了一块华为手表,他说手表上跑的是鸿蒙,这个鸿蒙是?()A、小程序   B、计时器   C、操作系统   D、神话人物   正确答案:C2、中国计算机学会(CCF)在2024年1月27日的颁奖典礼上颁布了王选奖,王选先生的重大贡献是?()A、制......
  • 【机器学习基础】Python编程02:五个实用练习题的解析与总结
    Python是一种广泛使用的高级编程语言,它在机器学习领域中的重要性主要体现在以下几个方面:简洁易学:Python语法简洁清晰,易于学习,使得初学者能够快速上手机器学习项目。丰富的库支持:Python拥有大量的机器学习库,如scikit-learn、TensorFlow、Keras和PyTorch等,这些库提供了......
  • 单片机原理及技术(三)—— AT89S51单片机(二)(C51编程)
    一、AT89S51单片机的并行I/O端口1.1P0口AT89S51的P0口是一个通用的I/O口,可以用于输入和输出。每个引脚都可以通过软件控制为输入或输出模式。1.1.1P0口的工作原理P0口的工作原理是通过对P0寄存器的读写操作来控制P0口的引脚。输出模式:当P0口配置为输出模式时,可以通过对......
  • Python Socket编程:从原理到实践
    在当今的网络世界中,Socket编程是构建网络通信应用的关键技术之一。从简单的聊天应用到复杂的分布式系统,Socket编程都扮演着至关重要的角色。本文将首先介绍Socket编程的基本原理,然后详细讲解如何使用Python进行Socket编程。注意:文中谈到的TCP/IP协议可以去我另一篇文章看一下,......
  • 代码实操学会socket网络编程
    一、网络编程接口网络编程接口是一组提供给开发者使用的函数和方法集合,用于在应用程序中实现网络通信功能。它提供了一种抽象层,使得开发者能够使用高级编程语言(如C、C++、Java、Python等)来进行网络编程,而无需直接处理底层的网络协议和细节。网络编程接口的功能和作用包括:......
  • 【Linux系统编程复习】一些常见的问题2
    11、如果要你实现一个mutex互斥锁你要怎么实现?实现mutex最重要的就是实现它的lock()方法和unlock()方法。我们保存一个全局变量flag,flag=1表明该锁已经锁住,flag=0表明锁没有锁住。实现lock()时,使用一个while循环不断检测flag是否等于1,如果等于1就一直循环。然后将flag设置为......
  • 【Linux系统编程复习】一些常见的问题3
    21、协程了解吗(高频)协程和微线程是一个东西。协程就是子程序在执行时中断并转去执行别的子程序,在适当的时候又返回来执行。这种子程序间的跳转不是函数调用,也不是多线程执行,所以省去了线程切换的开销,效率很高,并且不需要多线程间的锁机制,不会发生变量写冲突。22、那协程......
  • 网络编程练习题---利用UDP协议实现组播通信
    目录题目解析代码实现题目解析由于该题需要实现组播通信,所以我们需要将套接字文件句柄设置为组播属性,并将需要通信的用户端IP地址,加入组中。由于组播通信需要实现一对多发送消息,所以还需要将套接字文件句柄的广播属性一并开启。由于该题实现过程使用到了线程相关函数接口,所......
  • 编程题
    编程题编写一个函数,接受一个字符串,并返回该字符串中所有大写字母的数量。defcount_uppercase(string):returnsum(1forcharinstringifchar.isupper())实现一个函数,接受一个整数列表,并返回其中所有奇数的平方和。defsum_of_odd_squares(numbers):return......
  • 51 单片机[5]:模块化编程及LCD1602调试工具
    一、模块化编程1.相关概念传统方式编程:所有的函数均放在main.c里,若使用的模块比较多,则一个文件内会有很多的代码,不利于代码的组织和管理,而且很影响编程者的思路模块化编程:把各个模块的代码放在不同的.c文件里,在.h文件里提供外部可调用函数的声明,其它.c文件想使用其中的......