【TypeScript】类型守卫

跟着 小满zs 学ts,原文:学习TypeScript类型守卫_类型“{ rsfid: any; rsfname: any; cycletime: any; sor-CSDN博客

类型收缩(收窄)

const isString = (str: any) => typeof str === 'string' || str instanceof String;

typeof 只能返回有限的字符串类型,包括 “string”、“number”、“boolean”、“symbol”、“undefined” 和 “object”。对于函数、数组、null 等类型,typeof 也会返回 “object”。

类型谓词(自定义守卫)

实现一个函数,该函数可以传入任何类型。但是如果是object就检查里面的属性,如果里面的属性是number就取两位小数;如果是string就去除左右空格;如果是函数就执行。

// const isObject = (data:any): data is object => Object.prototype.toString.call(data) === '[object Object]'
// 同理以下写法
const isObject = (data: any) => ({}).toString.call(data) === '[object Object]'
const isFunction = (data: any) => typeof data === 'function'
const isNumber = (data: any): data is number => typeof data === 'number'
const isString = (data: any): data is string => typeof data === 'string'
const fn = (data: any) => {if (isObject(data)) {let value// 遍历不能使用 for in 因为 for in 会遍历原型链上的属性Object.keys(data).forEach(key => {value = data[key]if (isNumber(value)) {data[key] = value.toFixed(2)}if (isString(value)) {data[key] = value.trim()}if (isFunction(value)) {// value();data[key]();}})}
}
let obj = {a: 1.1234,b: '  123  ',c: function () {console.log(this, '函数执行')}
}
fn(obj)
console.log(obj)

当函数被单独调用时(例如 value(),nodejs环境 this->undefined / 浏览器环境 this -> window),函数内部的 this 会指向全局对象。所以这里要通过对象自身去调用。

自定义守卫,只能接收布尔值,例如:typeof str === 'string',当成立的时候,data 被赋予类型 string。

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

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

相关文章

snap nextcloud 通过不被信任的域名访问

安装向导 — Nextcloud latest 管理手册 latest 文档 find / -name config.php trusted_domains >array (0 > localhost,1 > server1.example.com,2 > 192.168.1.50,3 > [fe80::1:50], ), vim /var/snap/nextcloud/42567/nextcloud/config/config.php vim /va…

pytorch--Pooling layers

文章目录 1.torch.nn.MaxPool1d()2.torch.nn.MaxPool2d3.torch.nn.AvgPool2d()4.torch.nn.FractionalMaxPool2d()5.torch.nn.AdaptiveMaxPool2d()6.torch.nn.AdaptiveAvgPool2d() 1.torch.nn.MaxPool1d() torch.nn.MaxPool1d() 是 PyTorch 库中的一个类,用于在神经网…

ISP图像算法面试准备(1)

ISP图像算法面试准备 ISP图像算法面试准备(1) 文章目录 ISP图像算法面试准备前言一、ISP流程二、重点关注1. AWB必须在Demosaic之后进行。2. Gamma矫正通常在CCM之前进行 三、如何实现ISP参数自动化调试四、AE,即自动曝光(Auto Exposure)总结…

【太原理工大学】软件系统安全—分析题

OK了,又是毫无准备的一场仗,我真是ありがとうございます 凸^o^凸 根据前几年传下来的信息,所谓“分析”,就是让你根据情节自行设计,例如如何设计表单等,这类多从实验中出,王老师强调好好做实验一…

【面经总结】Java集合 - List

ArrayList 要点 实现机制 数组 扩容机制 初始容量为空列表&#xff0c;第一次插入后扩容成默认大小 10。 添加元素时如果已满&#xff0c;会自动扩容为原始大小的 1.5 倍。 类定义 // 类定义 public class ArrayList<E> extends AbstractList<E>implements…

Mybatis框架中结果映射resultMap标签方法属性收录

Mybatis框架中结果映射resultMap标签收录 在MyBatis框架中&#xff0c;resultMap 是一种强大的机制&#xff0c;用于将数据库结果集映射到Java对象上。它允许你定义如何将查询结果中的列映射到Java对象的属性上&#xff0c;尤其是当数据库表的字段名与Java对象的属性名不一致时…

Web前端成绩查询:深入解析与实用指南

Web前端成绩查询&#xff1a;深入解析与实用指南 在数字化时代&#xff0c;成绩查询系统已成为学校、培训机构等教育场所不可或缺的一部分。而xWeb前端成绩查询系统&#xff0c;以其高效、便捷的特点&#xff0c;赢得了广大用户的青睐。本文将从四个方面、五个方面、六个方面和…

HTML静态网页成品作业(HTML+CSS)—— 明星吴磊介绍网页(5个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有5个页面。 二、作品演示 三、代…

小白月赛96

小白月赛96 a最小胜利数b最小操作次数c最多数组数量 a最小胜利数 最小胜利数 只要有一个超过6次&#xff0c;那么便不可能反败为胜求出两位选手的题目差1&#xff0c;即为反败为胜的条件 ac code #include<iostream> using namespace std; int main(){string a;cin&g…

TCP与UDP案例

udp不会做拆分整合什么的 多大就是多大

【Spine学习08】之短飘,人物头发动效制作思路

上一节说完了跑步的&#xff0c; 这节说头发发型。 基础过程总结&#xff1a; 1.创建骨骼&#xff08;头发需要在上方加一个总骨骼&#xff09; 2.创建网格&#xff08;并绑定黄线&#xff09; 3.绑定权重&#xff08;发根位置的顶点赋予更多总骨骼的权重&#xff09; 4.切换到…

Orange_Pi_AIpro运行蜂鸟RISC-V仿真

Orange_Pi_AIpro运行蜂鸟RISC-V仿真 突发奇想&#xff0c;试一试Orange Pi AIpro上运行蜂鸟RISC-V的仿真。 准备 默认已经有一个Orange Pi AIpro&#xff0c;并且对设备进行一定的初始化配置&#xff0c;可以参考上一篇博文开源硬件初识——Orange Pi AIpro&#xff08;8T&a…

FineReport简单介绍

一、介绍 官网 &#xff1a;FineReport产品简介- FineReport帮助文档 - 全面的报表使用教程和学习资料 报表是以表格、图表的形式来动态展示数据&#xff0c;企业通过报表进行数据分析&#xff0c;进而用于辅助经营管理决策。 FineReport 是一款用于报表制作&#xff0c;分析和…

短视频矩阵系统源码搭建--如何基于各平台原生态坏境做开发

短视频矩阵系统源码搭建是一个涉及多个技术层面的复杂过程&#xff0c;它要求开发者能够理解并利用不同平台的原生环境来开发和部署应用程序。以下是一些基于不同平台原生环境开发短视频矩阵系统的一般步骤和考虑因素&#xff1a; 1.需求分析&#xff1a;首先明确系统需要实现的…

抽奖系统源码_微信抽奖系统PHP源码开源

介绍&#xff1a; 微信抽奖系统源码是一个以php MySQL进行开发的手机抽奖系统源码。用途&#xff1a;适合做推广营销、直播、粉丝抽奖。 功能介绍&#xff1a; 1、后台可以设置每个抽奖用户的抽奖次数,后台添加设置奖品,适和企业和商场搞活动,后台添加用户&#xff0c;才能抽…

[RL9] Rocky Linux 9.4 搭载 PG 16.1

副标题&#xff1a;Rocky Linux 9.4 升级实录&#xff0c;及 PG 16 相关内容 背景 Rocky Linux 9.4 (以下简称 RL) 于5月9日正式发布&#xff0c;本文记录了从 RL 9.3 升级到 9.4 的过程&#xff0c;以及升级前后的一些变化。 之前介绍过 RL 9 的相关内容&#xff0c;请戳&…

学习笔记——网络管理与运维——SNMP(SNMP架构)

三、SNMP架构 1、SNMP结构概述 SNMP被设计为工作在TCP/IP协议族上&#xff0c;基于TCP/IP协议工作&#xff0c;对网络中支持SNMP协议的设备进行管理。所有支持SNMP协议的设备都提供SNMP这个统一界面&#xff0c;使得管理员可以使用统一的操作进行管理&#xff0c;而不必理会设…

个人网站制作 Part 25 添加实时聊天功能 | Web开发项目添加页面缓存

文章目录 &#x1f469;‍&#x1f4bb; 基础Web开发练手项目系列&#xff1a;个人网站制作&#x1f680; 添加实时聊天功能&#x1f528;使用聊天服务&#x1f527;步骤 1: 选择聊天服务&#x1f527;步骤 2: 安装Socket.io&#x1f527;步骤 3: 创建Socket.io服务器 &#x1…

GStreamer 源码编译,在 Clion 下搭建调试环境

前言 最近在学习 GStreamer&#xff0c;官方提供了一些教程&#xff0c;本人希望能够断点调试&#xff0c;以便学习代码逻辑。本文记录如何在 Clion 搭建 GStreamer 源码编译、调试环境 步骤 下载源码 git clone https://gitlab.freedesktop.org/gstreamer/gstreamer.gitCl…

【漏洞复现】英飞达医学影像存档与通信系统 Upload.asmx 任意文件上传漏洞

0x01 产品简介 英飞达 医学影像存档与通信系统 Picture Archiving and Communication System&#xff0c;它是应用在医院影像科室的系统&#xff0c;主要的任务就是把日常产生的各种医学影像(包括核磁&#xff0c;CT&#xff0c;超声&#xff0c;各种X光机&#xff0c;各种红外…