你能看懂这段TypeScript源码库中的代码吗

在阅读TypeScript源码时,在 src\compiler\types.ts 文件中看到这么一段代码:

export type MatchingKeys<TRecord, TMatch, K extends keyof TRecord = keyof TRecord> = K extends (TRecord[K] extends TMatch ? K : never) ? K : never;

乍一看有点晕,仔细分析一下:

这段代码创建了一个名为“MatchingKeys”的类型,它接受三个泛型参数:TRecord、TMatch和K。

第一个参数TRecord表示一个具有各种属性的对象或记录。

第二个参数 TMatch 表示我们希望在记录中匹配的值类型。

最后,K 表示记录中键的一个子集。

然后,代码使用条件类型检查记录中的每个键(由 K 表示)是否具有与 TMatch 指定的类型匹配的值。

如果不匹配,那么该键将被排除在最终 MatchingKeys 类型之外。

进一步分解这个过程:

- 首先定义我们的通用参数:TRecord 是任何具有属性的对象或记录; TMatch 是任何特定的数据类型; K 是对象的键子集。
- 接下来我们使用条件类型来检查对象中的每个键(由 K 表示)是否具有与指定数据类型(TMatch)匹配的值。
- 如果这两个类型之间有一个给定键(K)的匹配,那么它将被包含在我们最终的 MatchingKeys 类型的一部分中。
- 然而,如果这两个类型之间没有给定键(K)的匹配,那么它将被排除在我们的最终MatchingKeys类型。
最后,我们返回由 K 表示的所有匹配键,或者什么都不返回,这取决于在比较过程中是否至少找到一个匹配对。

总结一下:

这段代码定义了一个类型MatchingKeys,它是一个函数,接受三个参数TRecord、TMatch和K。
如果TRecord与给定的TMatch匹配,则该函数返回TRecord的键。
如果 TRecord 不匹配给定的 TMatch,则它返回 never。

不知我理解的对不对,有不正确的地方,欢迎留言指正,也欢迎关注文本魔术公众号,了解更多

 

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

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

相关文章

重生奇迹MU游戏中勇者大陆

玩重生奇迹MU&#xff0c;我们进入游戏首先会来到勇者大陆。在看到勇者大陆市场&#xff0c;有很多交易的玩家也在这里&#xff0c;在勇者市场里面有商店。接下来介绍主要的NPC 的作用和怪物有那些&#xff1f; 勇者大陆卖药的商店老板莉雅 商店里面会有卖治疗药水&#xff0…

Mybatis-Mapper代理开发

Mapper代理开发 目的使用Mapper代理方式入门1.定义与SQL映射文件同名的Mapper接口&#xff0c;并且将Mapper接口和SQL映射文件放置在同一目录下首先新建一个Mapper接口编译mybatis-demo更改sql映射文件路径 2.设置SQL映射文件的namespace属性为Mapper接口全限定名3.在Mapper 接…

程序媛的mac修炼手册-- 靠谱的数据源网站

啊&#xff0c;今天还是要给大伙儿安利些干货&#xff0c;方才对得起大伙儿的关注支持啊&#xff5e; 我最开始用Mac&#xff0c;主要是做数据分析的。包括R语言、Python语言&#xff0c;这些分析工具在Mac上运行地都很流畅。但我很少用Mac自带的电子表单应用程序Numbers&…

QtApplets-SystemInfo

QtApplets-SystemInfo ​ 今天是2024年1月3日09:18:44&#xff0c;这也是2024年的第一篇博客&#xff0c;今天我们主要两件事&#xff0c;第一件&#xff0c;获取系统CPU使用率&#xff0c;第二件&#xff0c;获取系统内存使用情况。 ​ 这里因为写博客的这个本本的环境配置不…

Ubuntu 本地部署 ChatGPT-Next-Web

Ubuntu 本地部署 ChatGPT-Next-Web 文章目录 Ubuntu 本地部署 ChatGPT-Next-Web ChatGPT-Next-Web 项目地址&#xff1a;https://github.com/ChatGPTNextWeb/ChatGPT-Next-Web 本文主要演示如何在 Ubuntu 本地&#xff08;默认是端口 3000&#xff09;部署 ChatGPT-Next-Web&am…

【EI会议征稿通知】2024年第九届智能计算与信号处理国际学术会议(ICSP 2024)

2024年第九届智能计算与信号处理国际学术会议&#xff08;ICSP 2024&#xff09; 2024年第八届智能计算与信号处理国际学术会议&#xff08;ICSP 2024&#xff09;将在西安举行&#xff0c; 会期是2024年4月19-21日&#xff0c; 为期三天, 会议由西安科技大学主办。 欢迎参会&…

2024年【危险化学品生产单位主要负责人】复审模拟考试及危险化学品生产单位主要负责人作业模拟考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年危险化学品生产单位主要负责人复审模拟考试为正在备考危险化学品生产单位主要负责人操作证的学员准备的理论考试专题&#xff0c;每个月更新的危险化学品生产单位主要负责人作业模拟考试祝您顺利通过危险化学品…

“性能压测揭密:关键指标分析!“

在进行全链路压测和性能测试时&#xff0c;需要关注多个关键性能指标&#xff08;KPIs&#xff09;来评估系统的性能表现&#xff0c;以下是一些常见的性能测试指标。 1. 吞吐量&#xff08;Throughput&#xff09; 系统在单位时间内能够处理的请求数量或事务数量&#xff0c…

深入了解Apache 日志,Apache 日志分析工具

Apache Web 服务器在企业中广泛用于托管其网站和 Web 应用程序&#xff0c;Apache 服务器生成的原始日志提供有关 Apache 服务器托管的网站如何处理用户请求以及访问您的网站时经常遇到的错误的重要信息。 什么是 Apache 日志 Apache 日志包含 Apache Web 服务器处理的所有事…

大模型与大模型的幻觉问题

参考 大模型中的涌现 OpenAI 科学家&#xff1a;幻觉是大模型与生俱来的特性&#xff0c;而非缺陷 大模型「幻觉」&#xff0c;看这一篇就够了&#xff5c;哈工大华为出品 大模型 什么是大模型 大语言模型&#xff08;LLM&#xff09;是基于海量文本数据训练的深度学习模型…

「Verilog学习笔记」编写乘法器求解算法表达式

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点&#xff0c;刷题网站用的是牛客网 timescale 1ns/1nsmodule calculation(input clk,input rst_n,input [3:0] a,input [3:0] b,output [8:0] c);reg [8:0] data1, data2 ; assign c data2 ; always (posed…

SpingBoot的项目实战--模拟电商【4.订单及订单详情的生成】

&#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于SpringBoot电商项目的相关操作吧 目录 &#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 一.功能需求 二.代码编写 …