当前位置: 首页 > news >正文

TypeScript 中的类型检查实用函数

TypeScript 中的类型检查实用函数

文章目录

  • TypeScript 中的类型检查实用函数
  • 一、概述
  • 二、代码实现

一、概述

在前端开发中,我们经常需要判断变量的类型以进行相应的操作或处理。TypeScript 提供了基础的类型检查,但有时我们需要更复杂或更灵活的类型检查。这篇博客文章将介绍一组实用函数,用于各种常见的类型检查。

二、代码实现

// 禁用一些 ESLint 规则,主要是因为下面使用了 Object.prototype 的方法
// eslint-disable-next-line @typescript-eslint/unbound-method
const { toString } = Object.prototype// 判断一个值是否为指定类型
export function is(val: unknown, type: string) {return toString.call(val) === `[object ${type}]`
}// 判断一个值是否已定义
export function isDef<T = unknown>(val?: T): val is T {return typeof val !== 'undefined'
}// 判断一个值是否未定义
export function isUnDef<T = unknown>(val?: T): val is T {return !isDef(val)
}// 判断一个值是否是对象
export function isObject(val: any): val is Record<any, any> {return val !== null && is(val, 'Object')
}// 判断一个值是否为空
export function isEmpty<T = unknown>(val: T): val is T {if (isArray(val) || isString(val)) return val.length === 0if (val instanceof Map || val instanceof Set) return val.size === 0if (isObject(val)) return Object.keys(val).length === 0return false
}// 判断一个值是否是日期对象
export function isDate(val: unknown): val is Date {return is(val, 'Date')
}// 判断一个值是否是 null
export function isNull(val: unknown): val is null {return val === null
}// 判断一个值是否是 null 或 undefined
export function isNullOrUnDef(val: unknown): val is null | undefined {return isUnDef(val) || isNull(val)
}// 判断一个值是否是数字
export function isNumber(val: unknown): val is number {return is(val, 'Number')
}// 判断一个值是否是 Promise
export function isPromise<T = any>(val: unknown): val is Promise<T> {return is(val, 'Promise') && isObject(val) && isFunction(val.then) && isFunction(val.catch)
}// 判断一个值是否是字符串
export function isString(val: unknown): val is string {return is(val, 'String')
}// 判断一个值是否是函数
export function isFunction(val: unknown): val is Function {return typeof val === 'function'
}// 判断一个值是否是布尔值
export function isBoolean(val: unknown): val is boolean {return is(val, 'Boolean')
}// 判断一个值是否是正则表达式
export function isRegExp(val: unknown): val is RegExp {return is(val, 'RegExp')
}// 判断一个值是否是数组
export function isArray(val: any): val is Array<any> {return !!val && Array.isArray(val)
}// 判断一个值是否是 Window 对象
export function isWindow(val: any): val is Window {return typeof window !== 'undefined' && is(val, 'Window')
}// 判断一个值是否是 DOM 元素
export function isElement(val: unknown): val is Element {return isObject(val) && !!val.tagName
}// 判断一个值是否是 Map 对象
export function isMap(val: unknown): val is Map<any, any> {return is(val, 'Map')
}// 判断当前环境是否是服务器
export const isServer = typeof window === 'undefined'// 判断当前环境是否是客户端
export const isClient = !isServer// 判断一个字符串是否是有效的 URL
export function isUrl(path: string): boolean {const reg = /^((https|http|ftp|rtsp|mms):\/\/)(([0-9a-zA-Z_!~*'().&=+$%-]+: )?[0-9a-zA-Z_!~*'().&=+$%-]+@)?(([0-9]{1,3}.){3}[0-9]{1,3}|([0-9a-zA-Z_!~*'()-]+.)*([0-9a-zA-Z][0-9a-zA-Z-]{0,61})?[0-9a-zA-Z].[a-zA-Z]{2,6})(:[0-9]{1,4})?((\/?)|(\/[0-9a-zA-Z_!~*'().;?:@&=+$,%#-]+)+\/?)$/return reg.test(path)
}

相关文章:

TypeScript 中的类型检查实用函数

TypeScript 中的类型检查实用函数 文章目录 TypeScript 中的类型检查实用函数一、概述二、代码实现 一、概述 在前端开发中&#xff0c;我们经常需要判断变量的类型以进行相应的操作或处理。TypeScript 提供了基础的类型检查&#xff0c;但有时我们需要更复杂或更灵活的类型检…...

JavaScript中的事件委托(event delegation)

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ JavaScript事件委托⭐ 事件冒泡&#xff08;Event Bubbling&#xff09;⭐ 事件委托的优点⭐ 如何使用事件委托⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启…...

ubuntu OCR 脚本

1. 百度 PaddleOCR 介绍 2. 环境安装 pip install paddlepaddle -i https://pypi.tuna.tsinghua.edu.cn/simple # 进入 https://github.com/PaddlePaddle/PaddleOCR # 这里有个 requirements.txt pip install paddleocr -i https://mirror.baidu.com/pypi/simple pip instal…...

Go死码消除

概念: 死码消除(dead code elimination, DCE) 是一种编译器优化技术, 作用是在编译阶段去掉对程序运行结果没有任何影响的代码 和 逃逸分析[1],内联优化[2]并称为 Go编译器执行的三个重要优化 效果: 对于 const.go代码如下: package mainimport "fmt"func max(a, b i…...

基于改进莱维飞行和混沌映射的粒子群优化BP神经网络分类研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

12. 自动化项目实战

目录 1. 登录测试 2. 测试首页的帖子列表数不为0 3. 帖子详情页校验 4. 发布帖子 5. 退出登录 自动化项目实施的基本流程如下图所示&#xff1a; 手工测试用例、自动化测试用例。 1. 登录测试 校验登录后主页显示的用户名称和登录时输入的用户名是否相等。 public class…...

Window11下载安装jdk8-jdk11与环境变量的配置

目录 一、下载jdk 二、安装jdk 三、配置环境变量 四、检查JDK是否配置成功 一、下载jdk jdk8下载链接&#xff1a;请点击网址 jdk11下载链接&#xff1a;请点击网址 二、安装jdk 按照提示一步一步安装即可。 默认安装位置&#xff1a;C:\Program Files\Java 三、配置…...

Vector Search with OpenAI Embeddings: Lucene Is All You Need

本文是LLM系列文章&#xff0c;针对《Vector Search with OpenAI Embeddings: Lucene Is All You Need》的翻译。 使用OpenAI嵌入的向量搜索&#xff1a;Lucence是你所需的一切 摘要1 引言2 从架构到实现3 实验4 讨论5 结论 摘要 我们在流行的MS MARCO文章排名测试集上使用Lu…...

JS算法与树(二)

前言 二叉搜索树&#xff08;BST&#xff09;存在一个问题&#xff1a;当你添加的节点数够多的时候&#xff0c;树的一边可能会非常的深。而其他的分支却只有几层。 AVL树 为了解决上面的问题&#xff0c;我们提出一种自平衡二叉搜索树。意思是任何一个节点左右两侧子树的高度之…...

composer 扩展库。助手库文档

composer helpers packagist 简介 death_satan/composer 作用于在有composer管理工具的项目中。封装了上层由 composer V2 提供的 ClassLoader 和 InstallVersion 轻量级的封装&#xff0c;无任何第三方包集成。便捷式的使用composer V2 API 安装要求 php > 7.4composer &g…...

Web弹性布局

/*弹性盒子 弹性布局 */ /* 默认从左到右 */ display: flex; /* 从右到左 */ /* flex-direction: row-reverse; */ /* 从上到下 */ /* flex-direction: column; */ …...

基于深度学习的AI生成式人脸图像鉴别

AIGC&#xff08;AI内容生成&#xff09;技术的快速发展确实为创作者提供了高效生产力工具&#xff0c;但同时也引发了一些问题和挑战。这些技术可以生成以假乱真的图像、视频换脸等&#xff0c;给不法分子提供了滥用的机会。其中&#xff0c;一些不法分子可能利用AIGC技术制造…...

iOS开发Swift-1-Xcode创建项目

1.创建项目 双击Xcode App&#xff0c;选择Create a new Xcode project。 选择创建一个iOS普通的App项目。选择Single View App&#xff0c;点击Next。 填写项目名&#xff0c;组织名称等&#xff0c;点击next。 选择好文件的存储路径&#xff0c;点击create。 2.为前端添加组件…...

AI 领域中 SLAM、Planning 和 Perception 的区别和联系

在人工智能&#xff08;AI&#xff09;领域&#xff0c;SLAM、Planning 和 Perception 是三个关键的概念&#xff0c;它们在机器人、自主驾驶车辆等领域中扮演着重要的角色。以下是它们之间的区别和联系&#xff1a; SLAM SLAM&#xff08;Simultaneous Localization and Map…...

【数据库】MySQL基础知识全解

系列综述&#xff1a; &#x1f49e;目的&#xff1a;本系列是个人整理为了秋招面试的&#xff0c;整理期间苛求每个知识点&#xff0c;平衡理解简易度与深入程度。 &#x1f970;来源&#xff1a;材料主要源于拓跋阿秀、小林coding等大佬博客进行的&#xff0c;每个知识点的修…...

【golang】调度系列之goroutine

前面的两篇&#xff0c;从相对比较简单的锁的内容入手(也是干货满满)&#xff0c;开始了go的系列。这篇开始&#xff0c;进入更核心的内容。我们知道&#xff0c;go应该是第一门在语言层面支持协程的编程语言(可能是我孤陋寡闻)&#xff0c;goroutine也完全算的上是go的门面。g…...

A 股个股资金流 API 数据接口

A 股个股资金流 API 数据接口 全量股票资金流数据&#xff0c;全量A股数据&#xff0c;最长30日历史数据 1. 产品功能 支持所有A股资金流数据查询&#xff1b;每日定时更新数据&#xff1b;支持多达 30 日历史数据查询&#xff1b;超高的查询效率&#xff0c;数据秒级返回&am…...

【前端】Layui动态数据表格拖动排序

目录 一、下载layui-soul-table 二、使用 三、Layui实际使用 1、html代码 2、JS代码 3、PHP后台代码 目的&#xff1a;使用Layui的数据表格&#xff0c;拖动行进行排序。 使用插件&#xff1a;layui-soul-table 和 Layui 1.layui-soul-table文档&#xff1a;https://…...

Linux 忘记密码解决方法

很多朋友经常会忘记Linux系统的root密码&#xff0c;linux系统忘记root密码的情况该怎么办呢&#xff1f;重新安装系统吗&#xff1f;答案是不需要进入单用户模式更改一下root密码即可。 步骤如下&#xff1a; 重启linux系统 3 秒之内要按一下回车&#xff0c;出现如下界面 …...

【计算机组成 课程笔记】2.1 设计自己的计算机

课程链接&#xff1a; 计算机组成_北京大学_中国大学MOOC(慕课) 2 - 1 - 201-设计自己的计算机&#xff08;14‘24’‘&#xff09;_哔哩哔哩_bilibili 什么是指令系统体系结构&#xff1f;这个问题其实非常简单&#xff0c;但要想解释清楚也没有那么容易。我们还是从一个小故事…...

【2026年6月最新】英语四级历年真题及答案解析PDF电子版(2015-2025年12月)

2026年6月全国大学英语四级考试安排2026年上半年全国大学英语四级考试&#xff08;CET4&#xff09;定于6月13日举行。2025年12月四级真题资料包提供2025年12月英语四级考试全套备考资料&#xff1a;完整版考试真题试卷详细答案解析高清听力音频MP3文件PDF电子版文档&#xff0…...

uniapp复制文本的两种实现方式对比:从基础到进阶

Uniapp复制文本功能深度解析&#xff1a;从基础实现到跨平台适配 在移动应用和H5页面开发中&#xff0c;复制文本到剪贴板是一个看似简单却直接影响用户体验的基础功能。作为一款跨平台开发框架&#xff0c;Uniapp提供了多种实现方式&#xff0c;但每种方法都有其特定的适用场…...

快速部署DDColor:本地环境搭建与老照片修复完整流程

快速部署DDColor&#xff1a;本地环境搭建与老照片修复完整流程 1. 引言&#xff1a;让黑白记忆重获新生 在数字影像技术高度发达的今天&#xff0c;我们随手就能拍摄高清彩色照片。但那些承载着家族记忆和历史瞬间的黑白老照片&#xff0c;却因为技术限制而失去了色彩的温度…...

技术数据解析 | CALCE圆柱电池数据集:SOC估计的OCV测试基准

1. CALCE圆柱电池数据集的核心价值 CALCE电池数据集由马里兰大学先进生命周期工程中心发布&#xff0c;是目前全球最权威的公开电池测试数据之一。这个数据集最吸引我的地方在于它提供了完整的实验环境记录和标准化的测试流程&#xff0c;这对于电池状态估计算法的开发简直是雪…...

避开SDR通信的‘坑’:我在用Pluto做16QAM传输时遇到的相位偏移和同步问题

避开SDR通信的‘坑’&#xff1a;我在用Pluto做16QAM传输时遇到的相位偏移和同步问题 第一次用Pluto SDR搭建16QAM通信链路时&#xff0c;我盯着屏幕上扭曲的星座图发呆了半小时——理论上完美的16个星点&#xff0c;在实际接收时却像被无形的手揉成了一团毛线。这种挫败感想必…...

从‘两遍法’到‘并查集’:图像连通域算法演进与性能避坑指南

从‘两遍法’到‘并查集’&#xff1a;图像连通域算法演进与性能避坑指南 在工业质检、自动驾驶或医学影像分析中&#xff0c;处理一张2000万像素的图像时&#xff0c;传统连通域算法可能让系统卡顿数秒——这恰恰是算法选型失误的典型代价。本文将带您穿透三种主流算法的技术…...

芯片创业资金消耗与团队构建全解析

芯片初创公司的资金消耗分析&#xff1a;从架构设计到流片量产1. 芯片创业的资金挑战概述芯片设计行业作为典型的技术密集型产业&#xff0c;其创业过程面临着独特的资金挑战。与互联网创业不同&#xff0c;芯片公司从组建团队到产品量产需要经历漫长的研发周期和巨额的资金投入…...

深入拆解AM信号模拟:从AD9959 DDS配置到AD835乘法器调制的硬件设计细节

深入拆解AM信号模拟&#xff1a;从AD9959 DDS配置到AD835乘法器调制的硬件设计细节 在射频电路设计中&#xff0c;AM信号模拟系统是检验工程师硬件功底的最佳试金石。全国大学生电子设计大赛C题的经典命题&#xff0c;不仅考察对调幅原理的理解&#xff0c;更要求选手在30-40MH…...

别再只盯着模型了!Ansys SI/PI仿真中,用对IBIS的Pin Import才能抓准封装寄生效应

Ansys SI/PI仿真进阶&#xff1a;IBIS模型导入中Pin Import的封装寄生效应精准控制 在高速电路设计中&#xff0c;仿真结果的准确性往往决定了产品的成败。许多工程师花费大量时间优化PCB布局和模型参数&#xff0c;却忽略了IBIS模型导入这一关键环节对仿真精度的决定性影响。特…...

如何用Qlib快速打造你的AI量化交易系统:新手完整指南

如何用Qlib快速打造你的AI量化交易系统&#xff1a;新手完整指南 【免费下载链接】qlib Qlib 是一个面向人工智能的量化投资平台&#xff0c;其目标是通过在量化投资中运用AI技术来发掘潜力、赋能研究并创造价值&#xff0c;从探索投资策略到实现产品化部署。该平台支持多种机器…...