加深我对typeScript的印象(、|、Partial、Required、Pick、Omit)

2023-10-20 19:28

本文主要是介绍加深我对typeScript的印象(、|、Partial、Required、Pick、Omit),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

发现有错误、或者理解错误,及时联系我,感谢!!

文章目录

    • 1、‘&’符号
    • 2、‘|’符号
    • 3、‘‘Partial’’
    • 4、‘Required’
    • 5、‘Pick’
    • 6、 ‘Omit’

testA、testB、testC是我下面要用到的类

type testA = {name: string,age: number
}type testB = {name: string,sex: number
}type testC = {name: string,address?: string
}

1、‘&’符号

‘&’表示合并两个类型

//此时的demo类型就是testA 与 testB的合并类型
let demo:testA & testB//没问题,
demo = {
name:'tjq',
age:18,
sex:1
}//报错,因为此时没有sex字段
demo = {
name:'tjq',
age:18,
}//倘如testB修改为
type testB = {
name:number,
sex:number
}
//由于testB和testA共同存在name属性,并且name属性类型不同,n合并后name属性会变成never类型(报错)

2、‘|’符号

{// ‘|’ 此时b的类型表示要么满足testA的类型、要么满足testB的类型,或者两种都满足let demo: testA | testBdemo = {name: '123',sex: 2}demo = {name: "123",age: 18,sex: 1}}

3、‘‘Partial’’

//‘Partial’这个关键字表示将某个类的所有属性全部转为可选
let demo: Partial<testA>//demo不进行赋值,没问题
demo = {
}
//demo仅赋值一个name属性,没问题
demo = {
name:"tjq"
}

4、‘Required’

//‘Required’这个同‘Partial’恰恰相反,这个关键字是将类的所有属性转为必填
let demo:Required<testC>
//没问题
demo = {
name:"tjq",
address:"NanJing"
}
//报错,本身address是可选的,但是通过‘Required’转为了必填
demo = {
name:"tjq",
}

5、‘Pick’

//‘Pick’ 表示过滤出一个属性   pick<type,key>,从type参数里面"挑选出"key的类型let demo: Pick<testA, "name">demo = {name: 'tjq',}// 报错,age类型已经被‘Pick’过滤// demo = {//     name: 'tjq',//     age:18// }let demo2: Pick<testA, keyof testA>demo2 = {name: "tjq",age: 18}

6、 ‘Omit’

{//  ‘Omit’   表示过滤出一个属性   Omit<type,key>,从type参数里面”去掉“key的类型let demo: Omit<testA, keyof testB>demo = {age: 18}// 报错,name类型已经被‘Omit’过滤// demo = {//     name: 'tjq',//     age:18// }
}

这篇关于加深我对typeScript的印象(、|、Partial、Required、Pick、Omit)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/249229

相关文章

code: 400, msg: Required request body is missing 错误解决

引起这个错误的原因是,请求参数按照get方式给。 应该给json字符串才对 补充: 1. @RequestBody String resource 加@RequestBody必须给json字符串,否则会报错400,记如标题错误。 不加这个的进行请求的话,其实post和get就没有什么区别了。 2. List<String> indexCodes=(List<String>)json.

Vue3图片上传报错:Required part ‘file‘ is not present.

错误 "Required part 'file' is not present" 通常表明服务器期望在接收到的 multipart/form-data 请求中找到一个名为 file 的部分(即文件字段),但实际上没有找到。这可能是因为以下几个原因: 请求体构建不正确:在发送请求时,可能没有正确地将文件添加到 FormData 对象中,或者使用了错误的字段名。 前端代码错误:在前端代码中,可能

创建 typescript 项目.md

有时候需要创建一个最简单的 typescript 项目来验证一些东西,这里记录一下如何创建一个最简单的 typescript 项目。 创建并初始化项目 $ mkdir my-typescript-project$ cd my-typescript-project$ npm init -y$ npm install typescript ts-node @types/node --save

TypeScript数据结构与算法系列(一) —— 链表

TypeScript目录 链表常用操作1.初始化链表2. 插入节点3. 删除节点4. 访问节点5. 查找节点 图源:你好算法 内存空间是所有程序的公共资源,在一个复杂的系统运行环境下,空闲的内存空间可能散落在内存各处。我们知道,存储数组的内存空间必须是连续的,而当数组非常大时,内存可能无法提供如此大的连续空间。此时链表的灵活性优势就体现出来了。 链表(linked list)

VueSax-解决Vue3报错问题,并支持typescript

以下为坑点 根据官方提示,本人在vue3+typescript的项目中添加了vuesax的组件依赖 根据正常的导入依赖思路编写代码,发现typescript一直报 查询vuesax的目录文件发现存在ts文件,于是乎觉得是自己的问题,就查阅gpt与网上资料,查了一晚上加入各种方法,都没有解决,于是乎选择javascript进行测试,发现还是不行! js里虽然不报错,但是在页面

C++中const关键字的使用方法,烦透了一遍一遍的搜,总结一下,加深印象!!!

之前一直在学习C/C++,关于const的使用,这里出现一点,那里出现一点。知识用时方恨少,这一段时间正好各种笔试题,其中关于const的用法也是层出不穷,所以疲于在书本上各种翻,这里汇总一下,加深自己的印象的同时,也方便以后查阅和学习。菜鸟一个,若有错误,望指正! const关键字 常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的。不管出现在任何上

Cesium中的pick

参考地址–cesium 中的cpupick 和 gpupick 总结: pick ray 射线是利用场景求交集,cpupick,所以可以每次把不需要的mesh 给排除scene pick 基于canvas 二维反算 三维世界坐标的是gpupick 效率会更高

White spaces are required between publicId and systemId.

在配置applicationContext.xml时,编译器报错。 是因为XML的标签顺序导致。 <?xml version="1.0" encoding="UTF-8"?> <beans   xmlns="http://www.springframework.org/schema/beans"    xmlns:xsi="http://www.w3.org/2001/XMLSchema

迭代加深搜索——POJ 3134

对应POJ题目: 点击打开链接 Power Calculus Crawling in process... Crawling failed Time Limit:5000MS    Memory Limit:65536KB    64bit IO Format:%I64d & %I64u Submit Status Description Starting with

Vue3 + TypeScript 实现防抖(Debounce)和节流(Throttle)

在Vue3项目中结合TypeScript使用防抖(Debounce)和节流(Throttle)技术,可以有效提升应用的性能和用户体验,尤其是在处理频繁触发的事件(如滚动、窗口大小调整、输入框内容变化等)时。下面将详细介绍这两种技术的原理、使用方法以及适用场景。 一、防抖(Debounce) 原理: 防抖技术通过延迟函数的执行来减少函数的调用频率。在事件被触发n秒后再执行回调,如果在这