【TypeScript】ts中的keyof语法和作用

文章目录

  • 简言
  • keyof
    • 和泛型搭配使用
      • 约束范型参数的范围
      • 其他
  • 结语

简言

keyof 运算符接收一个对象类型,并产生其键的字符串或数字字面联合。
有的时候使用keyof 可以简化类型定义代码或者约束类型范围。

keyof

keyof 运算符接收一个对象类型,并产生其键的字符串或数字字面联合。意思就是将对象的key提取出来组成一个新的类型。
下面的类型 P 与类型 P = “x” | "y "是同一类型:

type Point = { x: number; y: number };
//	'x' | 'y'
type P = keyof Point;

如果类型有字符串或数字索引签名,keyof 将返回这些类型:

type Arrayish = { [n: number]: unknown };
//	number
type A = keyof Arrayish;type Mapish = { [k: string]: boolean };
//	string | number 
type M = keyof Mapish;

请注意,在这个示例中,M 是字符串 | 数字–这是因为 JavaScript 对象键总是被强制为字符串,所以 obj[0] 总是等同于 obj[“0”]。

keyof 类型与映射类型相结合时尤其有用。

和泛型搭配使用

和泛型搭配使用,一般就是在函数中定义。
例如下面示例,我在函数定义时约束了key必需是所传obj的key键值:

function getKeyValue<T extends object, K extends keyof T>(obj: T, key: K): T[K] {console.log(obj[key]);return obj[key]
}
getKeyValue({name: 'zsk6',age: 18
}, 'age')

约束范型参数的范围

有的时候我们想过滤掉一些key键。

type Person = {id: number;name: string;age: number;
};type MyPick<T, K extends keyof T> = { [P in K]: T[P] };
type P = MyPick<Person, 'id' | 'age'>

这样就可以生成一个指定key集合的新类型。

其他

keyof还可以和if语句、断言(as)、和typeof等约束范围的类型一起使用,形成新的类型。

结语

结束了。

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

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

相关文章

计算机基础(5)——进制与进制转换

&#x1f497;计算机基础系列文章&#x1f497; &#x1f449;&#x1f340;计算机基础&#xff08;1&#xff09;——计算机的发展史&#x1f340;&#x1f449;&#x1f340;计算机基础&#xff08;2&#xff09;——冯诺依曼体系结构&#x1f340;&#x1f449;&#x1f34…

了解一下Ubuntu Linux

1.3.1 什么是Ubuntu Ubuntu这个名字非常神奇&#xff0c;它取自非洲南部祖鲁语的ubuntu&#xff0c;是一个哲学名称&#xff0c;其意思为“人性”或者“我的存在是因为大家的存在”。对于中国人来说&#xff0c;一般称呼它为乌班图。 Ubuntu是在Debian的基础上开发出来的&am…

opencv标定板图像位置

下载的C中使用的opencv库有圆点和方格的标定板图像 Opencv4.6.0\sources\doc

什么是泛洪攻击?DDos攻击也是泛洪攻击的一种?

在数字化时代的浪潮中&#xff0c;网络安全已成为一场没有硝烟的战争。其中&#xff0c;泛洪攻击作为一种常见的网络攻击手段&#xff0c;对个人用户、企业乃至国家网络安全构成了严重威胁。本文将对泛洪攻击进行深入剖析&#xff0c;包括其定义、原理、类型、影响以及应对策略…

嵌入式Linux系统编程 — 1.4 原子操作与竞争冒险

目录 1 竞争冒险 1.1 竞争冒险由来 1.2 竞争冒险理解 2 原子操作 2.1 O_APPEND 实现原子操作 2.2 pread()和 pwrite() 2.3 O_EXCL 标志创建文件 1 竞争冒险 1.1 竞争冒险由来 Linux 是一个支持多任务和多用户同时运行的操作系统&#xff0c;它允许多个进程同时执行。…

kube-promethesu新增k8s组件监控(etcd\kube-controller-manage\kube-scheduler)

我们的k8s集群是二进制部署 一、prometheus添加自定义监控与告警&#xff08;etcd&#xff09; 1、步骤及注意事项&#xff08;前提&#xff0c;部署参考部署篇&#xff09; 1.1 一般etcd集群会开启HTTPS认证&#xff0c;因此访问etcd需要对应的证书 1.2 使用证书创建etcd的…

Verilog实战学习到RiscV - 3 : ICEStick 评估板点灯

收到 ICESTICK 评估板后还没好好玩。先来点个灯&#xff0c;正好把之前介绍过的工具链串起来用一下。 代码 Verilog代码只有一个顶层模块top.v&#xff0c;定义如下&#xff1a; module top(output wire D1,output wire D2,output wire D3,output wire D4,output wire D5);a…

王安石传-梁启超

国史氏曰&#xff1a;甚矣&#xff0c;知人论世之不易易也。以余所见宋太傅荆国王文公安石&#xff0c;其德量汪然若千顷之陂&#xff0c;其气节岳然若万仞之壁&#xff0c;其学术集九流之粹&#xff0c;其文章起八代之衰&#xff0c;其所设施之事功&#xff0c;适应于时代之要…

云手机定位切换,带来的不只是便利

当我们利用云手机的定位切换时&#xff0c;首先感受到的确实是极大的便利。 我们就像是拥有了瞬间移动的超能力&#xff0c;可以自由地在不同城市、甚至不同国家的虚拟场景中穿梭。无论是为了更精准地获取当地的信息&#xff0c;比如实时的交通状况、特色店铺等&#xff0c;还…

solana 通过助记码 恢复 path 私钥 导入相关插件钱包

solana 插件钱包 支持助记码 &#xff0c;私钥等方式导入&#xff0c;但区别于metamask 每次只能导入一个path 账户&#xff0c;头疼&#xff01; 上代码 import { Keypair } from "solana/web3.js"; import { HDKey } from "micro-ed25519-hdkey"; impor…

【CT】LeetCode手撕—3. 无重复字符的最长子串

目录 题目1- 思路1-1 模式1&#xff1a;涉及去重判断1-2 模式2&#xff1a;遍历字符串区间 2- 题解⭐无重复字符的最长子串——题解思路 3- ACM实现 原题链接&#xff1a;3. 无重复字符的最长子串 题目 无重复字符的最长子串 给定一个字符串 s &#xff0c;请你找出其中不含有…

裸芯片绑定键合电阻器

EAK厚膜阻芯与有源裸片键合在一起封装 一般说明 精密引线键合电阻具有极高的稳定性和可靠性。电阻器经过激光微调&#xff0c;达到严格的公差。可定制值和该值的唯一标记&#xff0c;非常适合但不限于混合电路应用。 潜在作用&#xff1a; 医用植入式 军事/国防 混合设计 …

搭建chattts应用,做文字转语音

下载代码 git clone https://github.com/2noise/ChatTTS.git下载endpoint并上传&#xff1a; https://huggingface.co/2Noise/ChatTTS/tree/main 将上面下载的文件上传到服务器上 修改webui.py 更改为本地模型地址 import os import random import argparseimport torch i…

dpdk-19.11 arm64 环境适配 Mellanox CX4 网卡

环境信息 cpu: arm64 架构 dpdk 版本&#xff1a;19.11 glibc 版本&#xff1a;2.17 网卡型号&#xff1a; Mellanox CX4 网卡&#xff0c;详细 pci 信息如下&#xff1a; 02:00.0 Ethernet controller: Mellanox Technologies MT27710 Family [ConnectX-4 Lx] 02:00.1 Ether…

一份最基础的gitlab-ci文件,其中就maven的build和test

说明的gitlab-ci.yml文件&#xff0c;包含注释解释每个部分的功能&#xff1a; # 定义流水线的各个阶段&#xff0c;包含两个阶段&#xff1a;build 和 test stages:- build- test# 设置Maven的环境变量&#xff0c;指定本地仓库位置 variables:MAVEN_OPTS: "-Dmaven.rep…

java-String 比较

在 Java 中&#xff0c;String 类的对象用于表示字符串。字符串比较是编程中常见的需求&#xff0c;比如判断两个字符串是否相等&#xff0c;或者比较两个字符串的大小等。Java 提供了多种方法来比较 String 对象。 ### 字符串比较的方式 #### 1. 使用 运算符 运算符用于比较…

投资少见效快产量高-UMLChina建模知识竞赛第5赛季第13轮

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 参考潘加宇在《软件方法》和UMLChina公众号文章中发表的内容作答。在本文下留言回答。 只要最先答对前3题&#xff0c;即可获得本轮优胜。 如果有第4题&#xff0c;第4题为附加题&am…

2024上海城博会:以绿色·节能·创新为主题,推动长三角一体化发展

2024上海城博会&#xff0c;作为“世界城市日”的重要主题活动之一&#xff0c;再次将全球的目光聚焦于这座东方明珠&#xff0c;展现了其在城市建设与管理领域的卓越成就。本次城博会由联合国人居署、上海市住房和城乡建设管理委员会联合主办&#xff0c;上海市绿色建筑协会承…

codereview时通常需要关注哪些

在团队成员之间互相进行代码审查&#xff08;codereview&#xff09;时&#xff0c;通常可以从以下几个方面来确保代码的质量和可维护性&#xff1a; 代码结构和格式&#xff1a; 检查代码是否遵循了项目约定的编码规范和风格指南。确保代码具有良好的可读性&#xff0c;比如合…

Qt 判断文件夹是否存在,不存在则创建

int CHttpFileRequest::CreatDownloadFile(QString path,QString fileName) {QDir mDir;if(!mDir.exists(path)){mDir.mkpath(path);}return 0; }