学习TypeScript 之 Pick与泛型约束
何为Pick?
type Pick<T, K extends keyof T> = {[key in K]: T[key]
}
就是从一个复合类型中,取出几个想要的类型的组合,例如:
// 原始类型
interface TState {name: string;age: number;like: string[];
}
// 如果我只想要name和age怎么办,最粗暴的就是直接再定义一个(我之前就是这么搞得)
interface TSingleState {name: string;age: number;
}
// 这样的弊端是什么?就是在Tstate发生改变的时候,TSingleState并不会跟着一起改变,所以应该这么写
interface TSingleState extends Pick<TState, "name" | "age"> {};
写到这里,Pick的用法就写完了,但是会有个疑问,extends不是用来继承的么?那为什么可以写在泛型里?有没有人跟我一样的疑惑?
我去查了资料后发现,还是官方文档中有这个解释(所以还是要多看文档,官方文档大多数比外面写的好得多),以下这段内容来自于官方文档。
泛型约束《官方文档传送门》
function loggingIdentity<T>(arg: T): T {console.log(arg.length); // Error: T doesn't have .lengthreturn arg;
}
相比于操作any所有类型,我们想要限制函数去处理任意带有.length属性的所有类型。 只要传入的类型有这个属性,我们就允许,就是说至少包含这一属性。 为此,我们需要列出对于T的约束要求。
为此,我们定义一个接口来描述约束条件。 创建一个包含 .length属性的接口,使用这个接口和extends关键字来实现约束:
interface Lengthwise {length: number;
}function loggingIdentity<T extends Lengthwise>(arg: T): T {console.log(arg.length); // Now we know it has a .length property, so no more errorreturn arg;
}
loggingIdentity(3); // Error, number doesn't have a .length property
loggingIdentity({length: 10, value: 3});
学习TypeScript 之 Pick与泛型约束相关推荐
- TypeScript 学习笔记(四)--- 泛型(Generics)
(注明:目前泛型理解不够清晰,先照葫芦画瓢,整理一个粗略版本,后续会再次补充) 一.泛型的概念 在TS中,泛型(Generics)是一种创建可复用代码的方式,类似于代码组件的概念.具体来说,就是在 ...
- TypeScript泛型约束
泛型约束 有了泛型之后,一个函数或容器类能处理的类型一下子扩到了无限大,似乎有点失控的感觉.所以这里又产生了一个约束的概念.我们可以声明对类型参数进行约束. 我们还拿上文中的student栗子来说,想 ...
- 作为前端开发,如何高效学习 TypeScript
大家好,我是若川.有朋友跟我说最近面试前端候选人,问到关于 JavaScript 的一些少见误区问题,候选人很多都没回答上来,他很诧异,一个从国际大厂出来的面试者,竟然对 JavaScript 的一些 ...
- TypeScript(七)泛型、声明合并、扩展阅读
TypeScript(七)泛型.声明合并.扩展阅读 文章目录 TypeScript(七)泛型.声明合并.扩展阅读 1. 泛型 简单的例子 多个类型参数 泛型约束 泛型接口 泛型类 泛型参数的默认类型 ...
- 学习TypeScript(TS),这一篇就足够了
一.TypeScript 简介 1.什么是 TypeScript? 官方文档 TypeScript 本质上是向 JavaScript 语言添加了「可选的静态类型」和「基于类的面向对象」编程,它相当于是 ...
- 学习Kotlin(四)对象与泛型
推荐阅读: 学习Kotlin(一)为什么使用Kotlin 学习Kotlin(二)基本语法 学习Kotlin(三)类和接口 学习Kotlin(四)对象与泛型 学习Kotlin(五)函数与Lambda表达 ...
- 深入浅出学习 TypeScript 语言
课程简介 2012年10月,微软发布了首个公开版本的 TypeScript,2013年6月19日,在经历了一个预览版之后微软发布了正式版 TypeScript 0.9.TypeScript 是 Jav ...
- Java学习 第十六天(泛型)
Java学习 第十六天---泛型与集合 第一章 泛型 1.1 泛型概述 1.2 泛型类 1.3 泛型类练习---抽奖问题 1.4 泛型类的子类 1.5 泛型接口 1.6 重写泛型父类或泛型接口中方法的 ...
- .NET支持的泛型约束
.NET支持的类型参数约束有以下五种: where T : struct | T必须是一个结构类型 where T : class T必须是一个类(class)类型 where T : new() | ...
最新文章
- 我看过的密码学方面的好文章
- RMAN duplicate database到新主机
- 程序员的24小时,简单纯粹又扎心...
- 【学习笔记】Dilworth 定理的构造性证明
- 2018第九届蓝桥杯省赛真题 C语言B组 第一题
- 分布与并行计算—生命游戏(Java)
- Linux有问必答:如何更新过期版本的Ubuntu
- oracle 表的移动,oracle 表移动表空间
- QT for android 比较完美解决 全屏问题
- Java怎么用继承回复信息_JAVA面向对象-继承
- CentOS7中使用systemctl列出启动失败的服务
- addr 与 offset 异同
- 使用源代码编译安装基于LAMP的网站架构
- 欧姆龙服务器显示oE,欧姆龙CP1H-E系列PLC实现Modbus TCP\RTU\ASCII通信视频教程
- Android深色模式适配
- 管理hiberfil.sys文件与pagefile.sys文件释放C盘
- 【翻译】 Unity3D VR 教程:1.VR概述
- 传统研发团队的敏捷转型实践之路
- 独家-县域统计年鉴Excel版(2000-2021年)-包含县市及乡镇卷
- 幅相曲线渐近线_幅相频率特性曲线.PPT