当前位置:网站首页>【ts】typescript高阶:映射类型与keyof
【ts】typescript高阶:映射类型与keyof
2022-08-05 05:16:00 【六月的可乐】
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
typescript高阶之映射类型与keyof
前言
学习目标
1、映射类型语法及示例
2、实现MyPartial工具类型
3、Key mapping语法及示例
4、keyof用法
一、映射类型语法及示例
1、映射类型语法
代码如下(示例):
// 映射类型语法
// { readonly [P in K]?: T}
// { [P in K]: T}
// { [P in K]?: T}
// { [P in K]-?: T}
// { readonly [P in K]: T}
// { readonly [P in K] ?: T}
// { -readonly [P in K] ?: T}
2、映射类型示例
代码如下(示例):
// 映射类型示例
type Item = {
a: string; b: number; c: boolean; };
type T1 = {
[P in 'x' | 'y']: number }; // {x: number; y: number}
type T2 = {
[P in 'x' | 'y']: P }; // {x: ‘x' ; y: 'y'}
type T3 = {
[P in 'a' | 'b']: Item[P] }; // {a: string ; b: number}
type T4 = {
[P in keyof Item]: Item[P] }; // {a: string ; b: number, c: boolean}
二、实现工具类型
MyPartial
代码如下(示例):
// 工具类型
type MyParital<T> = {
[P in keyof T]?: T[P]
};
type U1 = MyParital<{
name: string; age: number }>;// { name?: string; age?: number }
三、Key mapping语法及示例
1、Key mapping语法
代码如下(示例):
// key Mapping语法 其中的NewKeysType表示映射成的新key
type MappedTypeWidthNewKeys<T> = {
[P in keyof T as NewKeysType]: T[P];
};
2、Key mapping示例
Getter
功能:生成对象KV类型的getter函数类型
// 例子 -- Getter工具类型
// 功能:生成对象KV类型的getter函数类型
type Getter<T> = {
[K in keyof T as `get${
Capitalize<K & string>}`]: () => T[K];
};
interface User {
name: string;
age: number;
choose: boolean;
};
type Getter1 = Getter<User>;
// {
// getName: () => string;
// getAge: () => number;
// getChoose: () => boolean;
// }
RemoveKindField
功能:去除某一个key类型
// 例子 -- RemoveKindField工具类型
// 功能:去除某一个key类型
type Exclude<T, K> = T extends K ? never : T;
type RemoveKindField<T> = {
[K in keyof T as Exclude<K, 'kind'>]: T[K];
};
interface User2 {
name: string;
age: number;
kind: 'kind'
};
type User3 = RemoveKindField<User2>;// {name: string; age: number}
四、keyof用法
1、keyof应用示例
//keyof用法
// keyof用法示例
type K1 = keyof boolean; // 'valueof'
type K2 = keyof any;// string | number | symbol
type K3 = keyof number;// "toFixed" | "toExponential" | "toPrecision" | "toString" | "valueOf" | "toLocaleString"
type K4 = keyof string; // "charAt" | "charCodeAt" | "concat" | "indexOf" | "lastIndexOf" | "localeCompare" | "match" | "replace" | "search" | "slice" | "split" | ... 28 more ... | "valueOf"
enum HttpMethods {
Get,
Post,
Put,
Delete
};
type K5 = keyof typeof HttpMethods;// "Get" | "Post" | "Put" | "Delete"
2、Partial、Required、Pick、Record工具类型的内在实现
// 基于keyof实现的Partial、Required、Pick、Record工具类型的内在实现
type Partial<T> = {
[K in keyof T]?: T[K]
};
type Required<T> = {
[K in keyof T]-?: T[K];
}
type Pick<T, U extends keyof T> = {
[K in U]: T[K]
};
type Record<T extends keyof any, U> {
[key: T]: U;
}
3、keyof在泛型函数中的典型应用
// keyof在泛型函数中的典型应用
type user5 = {
name: string;
age: number;
boo: boolean;
}
type ValueType<T, U> = T extends keyof U ? U[T] : never;
function fn3(obj: user5, key: keyof user5): ValueType<keyof user5, user5> {
return obj[key];
}
总结
边栏推荐
- 网络信息安全运营方法论 (中)
- IDEA 配置连接数据库报错 Server returns invalid timezone. Need to set ‘serverTimezone‘ property.
- [Go through 9] Convolution
- 物联网:LoRa无线通信技术
- flink部署操作-flink on yarn集群安装部署
- AWS 常用服务
- 11%的参数就能优于Swin,微软提出快速预训练蒸馏方法TinyViT
- MySQL
- Mysql-连接https域名的Mysql数据源踩的坑
- MSRA proposes extreme masking model ExtreMA for learning instances and distributed visual representations
猜你喜欢

全尺度表示的上下文非局部对齐
![[Pytorch study notes] 10. How to quickly create your own Dataset dataset object (inherit the Dataset class and override the corresponding method)](/img/71/f82e76085f9d8e6610f6f817e2148f.png)
[Pytorch study notes] 10. How to quickly create your own Dataset dataset object (inherit the Dataset class and override the corresponding method)
![[Intensive reading of the paper] R-CNN's Bounding box regression problem is detailed](/img/ef/a058ec08bd0a6313e3610a4ebc9685.png)
[Intensive reading of the paper] R-CNN's Bounding box regression problem is detailed

网络ID,广播地址,掩码位数计算

网络信息安全运营方法论 (下)

flink部署操作-flink on yarn集群安装部署

BroadCast Receiver(广播)详解

【论文阅读-表情捕捉】ExpNet: Landmark-Free, Deep, 3D Facial Expressions

CVPR2021 - Inception Convolution with Efficient Dilation Search

Flink EventTime和Watermarks案例分析
随机推荐
华科提出首个用于伪装实例分割的一阶段框架OSFormer
Flink Broadcast 广播变量
数据库期末考试,选择、判断、填空题汇总
RecycleView和ViewPager2
【Pytorch学习笔记】11.取Dataset的子集、给Dataset打乱顺序的方法(使用Subset、random_split)
通过Flink-Sql将Kafka数据写入HDFS
MySQL
【数据库和SQL学习笔记】3.数据操纵语言(DML)、SELECT查询初阶用法
如何跟踪网络路由链路&检测网络健康状况
【数据库和SQL学习笔记】4.SELECT查询2:排序(ORDER BY)、聚合函数、分组查询(GROUP BY)
【Pytorch学习笔记】9.分类器的分类结果如何评估——使用混淆矩阵、F1-score、ROC曲线、PR曲线等(以Softmax二分类为例)
Oracle压缩表修改字段的处理方法
[Intensive reading of the paper] R-CNN's Bounding box regression problem is detailed
解决:Unknown column ‘id‘ in ‘where clause‘ 问题
网络信息安全运营方法论 (中)
大型Web网站高并发架构方案
Comparison and summary of Tensorflow2 and Pytorch in terms of basic operations of tensor Tensor
发顶会顶刊论文,你应该这样写作
Mesos learning
Flink Oracle CDC写入到HDFS