🎖️typeScrpt中如何从验证字符串?

简介: 模板文字类型本质上是一种字符串类型。通过定义字符串必须匹配的模式,这些类型提供了一种验证和推断数据的方式。它们是大约三年前在 TypeScript 4.1 中引入的。根据最初的 GitHub PR,以下示例演示了 TypeScript 利用模板文字类型获得的多功能特性。

嗨,大家好!这里是道长王jj~ 🎩🧙‍♂️

模板文字类型本质上是一种字符串类型。通过定义字符串必须匹配的模式,这些类型提供了一种验证和推断数据的方式。它们是大约三年前在 TypeScript 4.1 中引入的。根据最初的 GitHub PR,以下示例演示了 TypeScript 利用模板文字类型获得的多功能特性。

字符串格式验证

TypeScript 的模板文字有助于验证字符串格式。在下面的示例中,我们定义了一个 IPv4Address 类型,它使用模板文字来强制实施特定的字符串模式(IPv4 地址)。

// IPv4 地址格式,例如:192.168.0.1
type IPv4Address = `${number}.${number}.${number}.${number}`;

//> 错误:类型 '"19216801"' 不能赋值给类型 '`${number}.${number}.${number}.${number}`'
const badIpAddress: IPv4Address = '19216801';

//> 正确
const goodIpAddress: IPv4Address = '192.168.0.1';

IPv4Address 类型使用模板文字来定义 IPv4 地址的特定模式。如果字符串与该模式不匹配(例如 badIpAddress),TypeScript 将抛出错误。

从字符串中提取部分

模板文字可用于从字符串中提取组成部分,类似于在编译时解析字符串。ExtractIPv4Address 类型的目标是提取 IPv4 地址的四个段。

type ExtractIPv4Address<TIpAddress extends string> =
    TIpAddress extends `${infer A}.${infer B}.${infer C}.${infer D}` ? [A, B, C, D] : never;

//> IPv4AddressParts = ["192", "168", "0", "1"]
type IPv4AddressParts = ExtractIPv4Address<'192.168.0.1'>;

通过在模板文字中使用 TypeScript 的 infer 关键字,可以逐个提取 IP 地址的每个段。输出是与这些段对应的字符串数组。

通过分隔符分割字符串

最后,我们可以使用递归模板文字类型来模拟 JavaScript 中 split 函数的功能。Split 类型递归地将字符串 S 按分隔符 D 进行分割。

// 按分隔符分割字符串
type Split<S extends string, D extends string> =
    string extends S ? string[] :
    S extends '' ? [] :
    S extends `${infer T}${D}${
     infer U}` ? [T, ...Split<U, D>] : [S];

//> IPv4AddressParts = ["192", "168", "0", "1"]
type IPv4AddressParts = Split<'192.168.0.1', '.'>

//> IPv6AddressParts = ["2001", "0db8", "85a3", "0000", "0000", "8a2e", "0370", "7344"]
type IPv6AddressParts = Split<'2001:0db8:85a3:0000:0000:8a2e:0370:7344', ':'>;

如果字符串 S 可以按照分隔符 D 进行分割成两个段 TU,则类型返回一个数组,其中包含 T,以及 Split<U, D> 的结果。递归地继续这个过程,直到字符串 S 无法进一步分割,最后返回只包含字符串 S 作为唯一元素的数组。


🎉 你觉得怎么样?这篇文章可以给你带来帮助吗?当你处于这个阶段时,你发现什么对你帮助最大?如果你有任何疑问或者想进一步讨论相关话题,请随时发表评论分享您的想法,让其他人从中受益。🚀✨

目录
相关文章
|
数据采集 前端开发 JavaScript
服务器端渲染(SSR)与客户端渲染(CSR)的比较
服务器端渲染(SSR)与客户端渲染(CSR)的比较
1979 0
解决Vscode使用LeetCode报错Failed to test the solution. Please open the output channel for details.
本文提供了解决在VScode中使用LeetCode插件时遇到“Failed to test the solution. Please open the output channel for details.”错误的方法,主要是通过修改setting.json文件中的输出文件夹配置来解决。
1552 1
|
11月前
|
存储 安全 数据管理
销售易CRM:移动办公与数据安全的双重保障
销售易CRM助力企业销售团队在移动互联网时代实现高效业务开展与数据安全保障。其移动办公功能打破时空限制,支持离线操作与实时同步;多层次数据加密、权限管理及安全审计机制,全方位保护客户隐私。某跨国企业案例显示,销售易CRM大幅提升团队协作效率35%,降低数据泄露风险40%,实现移动与安全的完美结合。
|
12月前
|
存储 安全 Windows
u 盘不显示盘符怎么办?
在日常使用电脑的过程中,u盘是我们常用的存储设备之一。无论是传输文件、备份数据,还是安装系统,u盘都扮演着重要的角色。然而,有时候我们会遇到一个令人头疼的问题:插入u盘后,电脑上却没有显示盘符。这种情况不仅让人感到困惑,还可能影响工作进度。那么,遇到u盘不显示盘符的情况,我们该如何解决呢?接下来,我们将从多个角度分析可能的原因,并提供相应的解决方案。
|
人工智能 架构师 大数据
广西广电X阿里云:共同成立全媒体AI实验室!
广西广电X阿里云:共同成立全媒体AI实验室!
480 5
画图
画图。
551 15
|
SQL Java 数据库连接
JDBCTEMPLATE 的基本使用----查询操作26
JDBCTEMPLATE 的基本使用----查询操作26
JDBCTEMPLATE 的基本使用----查询操作26
|
安全 Java 数据库连接
Java中的异常处理:深入理解try-with-resources语句
在Java的异常处理领域,try-with-resources语句是一个重要的特性,它简化了资源管理并提高了代码的可读性。本文将详细探讨try-with-resources的工作原理、使用场景以及如何正确运用这一结构来优化资源管理,同时指出常见的误用情况和最佳实践。
641 0
|
存储 缓存 资源调度
Monorepo,大型前端项目管理模式实践
阅读本文您将了解到:什么是 monorepo、为什么要 monorepo、如何实践 monorepo。
9061 50
Monorepo,大型前端项目管理模式实践
vue3—使用element-plus表格导出excel表格(带图片)
今天制作后台管理系统,有一个二维码管理页面,要求把表格内的数据全部导出为Excel表格。 表格内有二维码图片,也要导出,制作的第一版是直接将图片的链接导出,但是要求导出能直接看的图片,所以就有了第二版。

热门文章

最新文章