当前位置:网站首页>【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];
}
总结
边栏推荐
- 如何组织一场安全、可靠、高效的网络实战攻防演习?
- MSRA proposes extreme masking model ExtreMA for learning instances and distributed visual representations
- Thread handler handle IntentServvice handlerThread
- 2022年中总结关键词:裁员、年终奖、晋升、涨薪、疫情
- 基于STM32F4的FFT+测频率幅值相位差,波形显示,示波器,时域频域分析相关工程
- 拿出接口数组对象中的所有name值,取出同一个值
- 基于Flink CDC实现实时数据采集(三)-Function接口实现
- [Intensive reading of the paper] R-CNN's Bounding box regression problem is detailed
- Flink Distributed Cache 分布式缓存
- 【数据库和SQL学习笔记】5.SELECT查询3:多表查询、连接查询
猜你喜欢
el-table,el-table-column,selection,获取多选选中的数据
发顶会顶刊论文,你应该这样写作
【Pytorch学习笔记】11.取Dataset的子集、给Dataset打乱顺序的方法(使用Subset、random_split)
Comparison and summary of Tensorflow2 and Pytorch in terms of basic operations of tensor Tensor
【论文精读】Rich Feature Hierarchies for Accurate Object Detection and Semantic Segmentation(R-CNN)
6k+ star,面向小白的深度学习代码库!一行代码实现所有Attention机制!
拿出接口数组对象中的所有name值,取出同一个值
基于STM32F407的一个温度传感器报警系统(用的是DS18B20温度传感器,4针0.96寸OLED显示屏,并且附带日期显示)
【论文精读】R-CNN 之预测框回归(Bounding box regression)问题详述
【论文阅读-表情捕捉】High-quality Real Time Facial Capture Based on Single Camera
随机推荐
[Pytorch study notes] 11. Take a subset of the Dataset and shuffle the order of the Dataset (using Subset, random_split)
[Skill] Long-term update
flink on yarn 集群模式启动报错及解决方案汇总
网络信息安全运营方法论 (中)
[Database and SQL study notes] 9. (T-SQL language) Define variables, advanced queries, process control (conditions, loops, etc.)
关于存储IOPS你必须了解的概念
Flink和Spark中文乱码问题
MySQL
Service
dataframe 常用操作
AIDL detailed explanation
flink部署操作-flink on yarn集群安装部署
CVPR 2022 | 70% memory savings, 2x faster training
【论文精读】Rich Feature Hierarchies for Accurate Object Detection and Semantic Segmentation(R-CNN)
如何停止flink job
六步搞定子网划分
vscode要安装的插件
Tensorflow踩坑笔记,记录各种报错和解决方法
[Kaggle project actual combat record] Steps and ideas sharing of a picture classification project - taking leaf classification as an example (using Pytorch)
关于基于若依框架的路由跳转