TypeScript中,如何利用数组生成一个联合类型

news2024/10/5 12:17:39

本文由 ChatMoney团队出品

在开发中我们常常会遇到这样一个问题,代码如下:

const arr = [
  "a",
  "b",
  "c",
  "d",
  "e",
  "f",
  "g",
  "h",
  "i",
  "j",
  "k",
  "l",
  "m",
  "n",
  "o",
  "p",
  "q",
  "r",
  "s",
  "t",
  "u",
  "v",
  "w",
  "x",
  "y",
  "z",
];

const func = (str) => {
    // ...
}

我们想要传入一个参数到str,而且这个参数必须是arr数组中的某一个元素,这时我们希望的是可以直接得到这个arr的联合类型,接下来一般我们会使用传统的方法去声明类型,如下:

type Strs = "a" | "b" | "c" | "d" | "e" | "f" | "g" | "h" | "i" | "j" | "k" | "l" | "m" | "n" | "o" | "p" | "q" | "r" | "s" | "t" | "u" | "v" | "w" | "x" | "y" | "z";

const func = (str: Strs) => {
    // ...
}

先不说这样的写法很笨,写的时候就已经很ex了,我们希望的是Strs可以根据上面arr的值来自动生成一个联合类型,这时我们可以有一个技巧来解决这个问题,就是先将str转换为元组:

const arr = [
  "a",
  "b",
  "c",
  // ...
] as const;

没转换前arr的类型为string[]

转换成元组后:

然后我们就可以使用typeof来生成一个联合类型:

最后我们给入参定义这个类型:

最后大功告成😎。

关于我们

本文由ChatMoney团队出品,ChatMoney专注于AI应用落地与变现,我们提供全套、持续更新的AI源码系统与可执行的变现方案,致力于帮助更多人利用AI来变现,欢迎进入ChatMoney获取更多AI变现方案!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1885170.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言使用先序遍历创建二叉树

#include<stdio.h> #include<stdlib.h>typedef struct node {int data;struct node * left;struct node * right; } Node;Node * createNode(int val); Node * createTree(); void freeTree(Node * node);void preOrder(Node * node);// 先序创建二叉树 int main()…

在CentOS7云服务器下搭建MySQL网络服务详细教程

目录 0.说明 1.卸载不要的环境 1.1查看当前环境存在的服务mysql或者mariadb 1.2卸载不要的环境 1.2.1先关闭相关的服务 1.2.2查询曾经下载的安装包 1.2.3卸载安装包 1.2.4检查是否卸载干净 2.配置MySQLyum源 2.1获取mysql关外yum源 2.2 查看当前系统结合系统配置yum…

物联网数据可视化利器:云组态设计器全新升级

数据可视化已成为数据展示与分析领域非常重要的工具。由多种图表、3D图形组成的大屏能够帮助用户非常直观简洁地了解数据。在物联网环境下,用户在制作数据展示大屏时,对数据可视化工具提出了更高的要求,例如能够展示3D组件、灵活的图层结构、支持多种数据源、实时的数据更新、图…

[教程]Gitee保姆级图文使用教程

我们在日常的工作过程中经常会遇到&#xff0c;家里和公司资料文件同步的问题&#xff0c;以及项目开发过程中的协作问题。Git就完美的解决了这些问题&#xff0c;但是由于 Git国外服务器的原因平时网络太慢了&#xff0c;不过还好有国内的托管平台Gitee&#xff08;码云&#…

Ubuntu20.04 有线网络图标消失解决方案

Ubuntu20.04 有线网络图标消失解决方案 问题描述&#xff1a; ubuntu20.04系统提示的software updater有软件包更新&#xff0c;按提示安装更新软件包&#xff0c;重启系统后&#xff0c;ubuntu系统的网络图标消失不见&#xff1b;无法正常上网&#xff1b;检查网口&#xff0…

hadoop分布式云笔记系统-计算机毕业设计源码15725

摘 要 随着信息技术的飞速发展&#xff0c;人们对于数据的存储、管理和共享需求日益增长。传统的集中式存储系统在处理大规模数据时面临着性能瓶颈和扩展性问题。而 Hadoop 作为一种分布式计算框架&#xff0c;为解决这些问题提供了有效的解决方案。 本研究旨在设计并实现一种…

LVM核心概念

1. LVM简介 LVM是逻辑盘卷管理&#xff08;Logical Volume Manager&#xff09;的简称&#xff0c;它是Linux环境下对磁盘分区进行管理的一种机制&#xff0c;LVM是建立在硬盘和分区之上的一个逻辑层&#xff0c;来提高磁盘分区管理的灵活性。 优点&#xff1a; 可以灵活分配…

LeetCode Top 100 题目概览及部分题目解答【两数之和,接雨水,最长回文子串,三数之和】

本人详解 作者:王文峰,参加过 CSDN 2020年度博客之星,《Java王大师王天师》 公众号:JAVA开发王大师,专注于天道酬勤的 Java 开发问题中国国学、传统文化和代码爱好者的程序人生,期待你的关注和支持!本人外号:神秘小峯 山峯 转载说明:务必注明来源(注明:作者:王文峰…

【C++之unordered_set和unordered_map的介绍与应用】

C学习笔记---024 C之unordered_set和unordered_map的介绍与应用1、unordered_set和unordered_map的简单介绍1.1、unordered_set和unordered_map的基本概念1.2、unordered_set和unordered_map的基本特性 2、unordered_set的基本操作2.1、unordered_set的定义2.2、unordered_set的…

docker部署前端,配置域名和ssl

之前使用80端口部署前端项目后&#xff0c;可以使用IP端口号在公网访问到部署的项目。 进行ICP域名备案后&#xff0c;可以通过域名解析将IP套壳&#xff0c;访问域名直接访问到部署的项目~ 如果使用http协议可以很容易实现这个需求&#xff0c;对nginx.conf文件进行修改&#…

python中的包和模块

目录 一、包与模块 二、第三方包的安装 2.1 pip install 2.2使用 curl 管道 2.3其他安装方法 三、导入单元的构成 3.1pip的使用 四、模块的缓存 一、包与模块 Python 中除了函数库以外&#xff0c;还有非常多且优秀的第三方库、包、模块。 模块Module&#xff1a;以…

Python容器 之 字符串--定义

目录 1.字符串如何定义&#xff1f; 2.定义字符串时遇到特殊内容怎么处理&#xff1f; 1)字符串本身包含引号&#xff0c;如&#xff1a;定义字符串 Im 小明、他叫“小明”。 &#xff08;1&#xff09;如果字符串本身包含单引号,定义的时候不能使用 单引号。 &#xff08…

币界网讯,美国选择 Coinbase 进行数字货币托管

2024 年0 7 月 02 日。华盛顿特区美国法警局 (USMS) 宣布选择 Coinbase Prime 作为其“一级”数字资产的托管人和高级交易服务提供商&#xff0c;USMS这一具有里程碑意义的决定&#xff0c;反映了数字资产日益融入美国联邦司法程序的趋势。Coinbase 是世界排名前十的数字货币交…

解决微信能登陆,但打不开浏览器的WIFI连接问题

双击打开ipv4&#xff0c;改成自动获取 点击确定保存好 断网重新联网

头条系统-05-延迟队列精准发布文章-概述添加任务(db和redis实现延迟任务)、取消拉取任务定时刷新(redis管道、分布式锁setNx)...

文章目录 延迟任务精准发布文章 1)文章定时发布2)延迟任务概述 2.1)什么是延迟任务2.2)技术对比 2.2.1)DelayQueue2.2.2)RabbitMQ实现延迟任务2.2.3)redis实现 3)redis实现延迟任务4)延迟任务服务实现 4.1)搭建heima-leadnews-schedule模块4.2)数据库准备4.3)安装redis4.4)项目…

第十一章 路由器单臂路由配置

实验目标 掌握单臂路由器配置方法&#xff1b; 通过单臂路由器实现不同 VLAN 之间互相通信&#xff1b; 实验背景 某企业有两个主要部门&#xff0c; 技术部和销售部&#xff0c; 分处于不同的办公室&#xff0c; 为了安全和便于管理对两个部门的主机进行了 VLAN 的划分&#x…

ACM美国计算机协会简介及个人下载ACM文献途径

ACM美国计算机协会简介&#xff1a; ACM&#xff08;Association for Computing Machinery&#xff09; 创立于1947年&#xff0c; 是全球历史最悠久和最大的计算机教育、科研机构。ACM目前提供的服务遍及全球100多个国家&#xff0c;会员数超过9万名&#xff0c;涵盖工商业&a…

【力扣】赎金信

&#x1f525;博客主页&#xff1a; 我要成为C领域大神&#x1f3a5;系列专栏&#xff1a;【C核心编程】 【计算机网络】 【Linux编程】 【操作系统】 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 本博客致力于知识分享&#xff0c;与更多的人进行学习交流 ​ 给你两个字符串…

商家转账到零钱开通教程及辅助开通手段详解

商家转账到零钱申请可以通过商家自行申请或者辅助开通手段代申请两种方式&#xff0c;如果自行申请难以过审&#xff0c;辅助开通代申请则成为降低商家时间成本和商户号风险的必要手段&#xff0c;以下从自助申请和辅助开通两种方式说说商家转账到零钱高效开通办法。 自行申请方…

产品经理-对产品经理的认识(1)

今天跟大家聊一下产品经理这个岗位的,产品经理是互联网岗位当中比较火的一个岗位,也是最接近CEO的岗位 产品经理岗位&#xff0c;技术门槛低&#xff0c;薪水和前景都很不错&#xff0c;又处于团队的核心位置 产品经理岗位没有完全相关的专业设置和清晰的学习路径&#xff0c;绝…