34、keyof类型操作符

文章目录

  • js中的Object.keys()
  • ts中的keyof
  • 实践中有何用
  • 应用范围

ts中有很多的工具类型:Partial部分、Required必填项、Pick选择、Record 记录;keyof在其中有大量的运用

js中的Object.keys()

const keys = Object.keys({id: 12,name:'z'}) // ['id', 'name']

ts中的keyof

keyof 是 TS 中的索引类型查询操作符,用于获取一个对象类型的所有属性名称的联合类型。

在ts中操作的是类型,获取对象类型中全部的键,就需要使用keyof类型操作符。 该操作符在TypeScript 2.1中引入,用于获取类型中的所有键,其返回类型为联合类型。​​​​​​​

关键字: 对象类型

type User = {id: number;name: string
}
type Userkeys= keyof User // "id"|"name"type U1 = User["id"] // number
type U2 = User["name"] // string
type U3 = User[keyof User] //string | number

User 是一个对象类型,keyof 会获取 User 对象类型属性名称联合类型,也就是 “id” | “name” 。Userkeys的类型与下面的类型定义是等价的:

type UnionType = "id" | "name" ;

实践中有何用

如下,很Simple的demo,但是在ts中会报类型类型错误

function getValue(obj: Object, key: string) {return obj[key]
}
const userkate = {id: 666,name: 'kate'
}

正确写法:

function getValue<T extends Object, K extends keyof T>(obj: T, key: K) {return obj[key]
}
const userkate = {id: 666,name: 'kate'
}
// 类型参数T, extends 用于将类型参数的实际类型约束为对象类型的子类型
// K也使用 extends 将类型参数的实际类型约束为对象类型的所有键的联合类型的子类型let id = getValue(userkate, 'id')
let name45= getValue(userkate, 'name')
//let sex = getValue(userkate, 'sex') 
// Argument of type '"sex"' is not assignable to parameter of type '"id" | "name"'.

应用范围

keyof 类型操作符不仅可以应用于对象类型,还可以应用于基本数据类型、任何类型、类和枚举类型

type K1 = typeof Boolean // 'valueOf'
type K2 = keyof number // "toString" | "toFixed" | 'valueOf' | .....
type K3 = keyof any // string | number | symbolclass Person1 {id: number = 9;name: string = 'zl'
}
type P = keyof Person1 // 'id' | 'name'enum Http {get,post
}
type Methods = keyof typeof Http // 'get'|'post'

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

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

相关文章

数组----柔性数组

C99标准中&#xff0c;定义了一个关于数组的动态数组的概念&#xff0c;该数组可以根据实际需求来改变数组的长度&#xff0c;以实现柔性变化&#xff0c;这种数组也被称为柔性数组。 一.柔性数组的定义 在结构体中&#xff0c;最后一个元素为可变长度的数组&#xff0c;这个…

redis未设置密码被植入挖矿脚本

最近一台测试linux响应速度贼慢&#xff0c;检查发现cpu消耗高达100%&#xff01;查看进程杀死后过段时间又重启了&#xff0c;一时间也摸不到头绪。无意间发现启动redis的时候cpu瞬间拉到了100%&#xff0c;主要就是zzh和newinit.sh两个脚本。百度了一下说是被植入了挖矿脚本&…

玩转安卓之配置gradle-8.2.1

概述&#xff1a;看了一下&#xff0c;由于gradle是国外的&#xff0c;所以下载速度很慢&#xff0c;这个老师又是很菜的类型&#xff0c;同学又不会&#xff0c;于是曹某就写这一篇文章&#xff0c;教大家学会简单的为安卓配置gradle-8.2.1。 第一步&#xff1a;下载gradle-8…

990-41产品经理:Essential Skills for Written Communication 书面沟通的基本技能

What is written communication? 什么是书面沟通&#xff1f; In the age of information, there is simply too much to remember. A simple solution is to write it all down. Written communication definition Written communication is making use of the written word…

电时代来临:2024北京新能源锂电池技术展盛夏8月!

2024中国&#xff08;北京&#xff09;国际新能源电池技术及设备展览会 时间&#xff1a;2024年8月1-3日 地点&#xff1a;中国国际展览中心&#xff08;顺义馆&#xff09; 展会概况 受益于政策的支持&#xff0c;我国新能源汽车市场规模逐步扩大、渗透率逐步提高&#xf…

前段结课总结

一.HTML基础 1.标记的类型&#xff1a;单个标记和成对标记&#xff0c;单个标记例如<br />用来设置换行操作<hr />用来设置分割线的属性<link />用来进行连接外部的文件&#xff0c;例如HTML文档的CSS样式设置可以放在新建的CSS文件类型里面&#xff0c;通过…

用例找到请求超时的接口

方法1&#xff1a; 在调用requests.api方法时传入timeout参数&#xff0c;指定timeout超时时间 如timeout10&#xff0c;则接口请求超过10秒没有返回&#xff0c;则请求抛出异常&#xff0c;终止执行 Read timed out. (read timeout5) 方法2&#xff1a; 在接口调用后&#…

LeetCode2575. Find the Divisibility Array of a String

文章目录 一、题目二、题解 一、题目 You are given a 0-indexed string word of length n consisting of digits, and a positive integer m. The divisibility array div of word is an integer array of length n such that: div[i] 1 if the numeric value of word[0,……

C++复习笔记——泛型编程模板

01 模板 模板就是建立通用的模具&#xff0c;大大提高复用性&#xff1b; 02 函数模板 C另一种编程思想称为 泛型编程 &#xff0c;主要利用的技术就是模板 C 提供两种模板机制:函数模板和类模板 函数模板语法 函数模板作用&#xff1a; 建立一个通用函数&#xff0c;其函…

【kubernetes】关于k8s集群的配置资源(configmap和secret)

目录 一、Secret 类型一&#xff1a;kubernetes.io/service-account-token 类型二&#xff1a;普通类型secret&#xff0c; ●Opaque&#xff0c;base64 编码格式的 Secret&#xff0c;用来存储用户自定义的密码、密钥等&#xff0c;默认的 Secret 类型; 类型三&#xff1a;…

在Linux/Ubuntu/Debian中计算MD5,SHA256的方法

MD5&#xff08;消息摘要算法 5&#xff09;和 SHA-256&#xff08;安全哈希算法 256 位&#xff09;等流行的哈希算法广泛用于从任意数据生成固定大小的哈希值或校验和。 以下是这些算法及其计算方式的简要概述&#xff1a; MD5&#xff08;消息摘要算法5&#xff09;&#x…

tiktok矩阵引流系统开发常用源代码!

在数字营销领域&#xff0c;TikTok已成为一个不可忽视的平台&#xff0c;随着其用户基数的不断增长&#xff0c;如何利用TikTok进行有效的引流成为了许多企业和营销人员关注的焦点。 为了实现这一目标&#xff0c;许多开发者开始构建TikTok矩阵引流系统&#xff0c;这些系统通…

基于docker安装的Jenkins实现python执行自动化测试程序

背景 通过Jenkins实现自动化测试,在全局配置中配置好后,执行构建发生如下错误 解决办法: 在Jenkins中插件管理中下载python后,回到Jenkins容器中 查找刚下载的python所在位置 到Jenkins中全局配置中修改脚本 1.可以在环境变量中定义python所在位置 2.在一下图示中进行获取…

数据解读乡村发展!专家详解 2024 年(第 17 届)中国大学生计算机设计大赛大数据主题赛赛题

2024 年&#xff08;第 17 届&#xff09;中国大学生计算机设计大赛大数据主题赛“数据解读乡村发展”赛题已于和鲸平台正式开赛&#xff0c;一月来&#xff0c;已有来自全国超百所高校的优秀本科生积极响应大赛号召完成报名。 为进一步使广大师生对于赛题主旨形成更清晰的认知…

LSTM进行字符级文本生成_3(pytorch实现)

文章目录 基于pytorch的LSTM进行字符集文本生成前言一、数据集二、代码实现 1.到入库和LSTM进行模型构建2.数据预处理函数3.训练函数4.预测函数5.文本生成函数6.主函数完整代码总结 前言 本文介绍了机器学习中深度学习的内容使用pytorch构建LSTM模型进行字符级文本生成任务 一…

尝试各种可以联网的AI

phind https://www.phind.com/ 搜索次数限制&#xff1a;无 右侧显示搜索引用文章地址链接以及大致内容缩略显示 左侧显示总结 perplexity https://www.perplexity.ai/ 搜索次数限制&#xff1a;每四小时5次搜索 内容上下分层&#xff0c;样式如下&#xff1a; Sources 显示…

一篇长文教你进行全方位的使用appium【建议收藏】

随着移动应用的日益普及&#xff0c;移动应用的测试成为了软件开发的重要组成部分。Python&#xff0c;作为一种易于学习&#xff0c;功能强大的编程语言&#xff0c;特别适合进行这种测试。本文将详细介绍如何使用Python进行APP测试&#xff0c;并附带一个实例。 Python 和 A…

OPCUA 学习笔记-程序模型

无论是边缘控制器&#xff0c;还是PLC 中&#xff0c;除了信息模型之外&#xff0c;还有应用程序&#xff0c;这些程序可能是IEC61131-3 编写的程序&#xff0c;也可能是其它程序开发的可执行程序。 尽管OPCUA 描述模型能力很强&#xff0c;但是它缺乏算法的描述方式。但是OPCU…

qnx启动

bmetrics_service boot metrics service, 用于记录统计启动性能信息,读取/dev/bmetrics可以获取到这些信息 # use memorydump memorydump Sets the debug cookies, copies MMU info into reset_info asinfo, sets the secure monitor(TZ) dump buffer, starts tracelogger Usa…

【代码随想录算法训练营Day38】动态规划理论基础;509.斐波那契数;70.爬楼梯;746.使用最小花费爬楼梯

文章目录 ❇️Day 38 第九章 动态规划 part01✴️今日任务⏺️理论基础1. 什么是动态规划2. 动态规划题目类型3. 误区4. 动规五部曲5. 如何debug ❇️509. 斐波那契数随想录思路自己的代码 ❇️70. 爬楼梯随想录思路自己的代码 ❇️746. 使用最小花费爬楼梯随想录思路自己的代码…