一个 TypeScript keyof 泛型用法
平时工作自认为有 Swift
Rust
经验, 所以不需要看 TypeScript
泛型方面的应用, 总以为大同小异, 拒绝看文档学语言, 从我做起. 今日看到一个用上泛型的 pluck
函数
function pluck<T, K extends keyof T>(o: T, names: Array<K>): T[K][] {return names.map(n => o[n]);
}
复制代码
有点懵逼, 查了一下 keyof
的应用.
const a = {a: 1,b: 2,
};
keyof typeof a; // 'a' | 'b'class A {c: number;d: number;
}keyof A; // 'c' | 'd'
复制代码
哦呼, 完蛋, 直接生成一个联合属性, 所以 pluck
函数 K
就是把 T
属性名作为字面量类型. K
就是 T
的属性名, 所以 T[K][]
这样的类型也好理解了.
至于字面量类型就是 TypeScript
可以把一个字符串当作一个类型
const a: 'a';
复制代码
TypeScript
的类型系统还是蛮好玩的, 嗯哼就这样吧.
一个 TypeScript keyof 泛型用法相关推荐
- 一个线程中lock用法的经典实例
1 /* 2 该实例是一个线程中lock用法的经典实例,使得到的balance不会为负数 3 同时初始化十个线程,启动十个,但由于加锁,能够启动调用WithDraw方法的可能只能是其中几个 4 作者: ...
- php中一个经典的!==的用法
php中一个经典的!==的用法 1 <?php 2 $str = 'Every time you bleed for reaching greatness.'; 3 $cha = 'E'; 4 ...
- NPM 安装 TypeScript 和 npm 的 Invalid package.json 错误以及运行第一个typescript程序
TypeScript 是 JavaScript 的一个超集,支持 ECMAScript 6 标准(ES6 教程). TypeScript 由微软开发的自由和开源的编程语言. TypeScript 设计 ...
- 【Flutter】Dart 数据类型 List 集合类型 ( 定义集合 | 初始化 | 泛型用法 | 初始化后添加元素 | 集合生成函数 | 集合遍历 )
文章目录 I . 定义集合并初始化 II . 集合泛型用法 III . 集合添加元素 IV . 集合生成函数 V . 集合遍历 VI . 集合示例代码 I . 定义集合并初始化 定义并初始化 List ...
- typescript的keyof的用法
第一种:与接口一起用,返回联合类型 interface Person {name: string;age: number;location: string;}type K1=keyof Person; ...
- typescript keyof 和 typeof 用法
typeof 操作符可以用来获取一个变量或对象的类型 const states = {name: 1,block: () => {return '123'}, }同一个类型的数据,直接获取它的类 ...
- TypeScript 之泛型
文章出自个人博客 https://knightyun.github.io/2021/04/18/js-ts-generic-type,转载请申明 背景 泛型用于创建可复用的支持多种类型的组件,比如不仅 ...
- C# ListT泛型用法
C# List<T>用法 所属命名空间:using System.Collections.Generic; List<T>类是 ArrayList 类的泛型等效类. 该类使用 ...
- React + TypeScript 实现泛型组件
泛型类型 TypeScript 中,类型(interface, type)是可以声明成泛型的,这很常见. interface Props<T> {content: T; } 这表明 Pro ...
最新文章
- Linux系统调用--getrlimit()与setrlimit()函数详解
- how to find your partner
- oracle 地市 区县分组,oracle分组写法 - 挣扎在陌生城市ITMAN的个人空间 - OSCHINA - 中文开源技术交流社区...
- 我的PDF阅读器之muPDF的编译
- 实用供暖通风空调设计手册 第三版_实用供热空调设计手册(第三版)“流体输配与水力平衡”技术专题讨论会...
- cad2020打印样式放在哪个文件夹_2019年中级考试准考证打印时间!错过将无法参加考试...
- 2021年下半年软件设计师上午真题答案及解析(一)
- ecshop怎么写原生php,ecshop二次开发的简单实例
- PHP实现简单的注册页面(正则表达式练习)
- 音视频编解码学习详解h264 ,mpeg4 ,aac 等音视频格式
- 免费logo设计在线生成
- 如何自己制作CHM电子书?
- 对自己的反思 (闲暇中的面试总结)
- 前端常用事件案例——抽名字(抽奖)/搜索下拉菜单/微博文本框
- office 论文 页码_WORD目录,页眉,页脚,页码设置技巧 为你的毕业论文收藏吧-以Word 2013演示...
- NOI2015 Day1 T2 软件包管理器 树链剖分
- MISRA 2004 VS MISRA 2012
- 数字信号处理实验线性卷积与循环卷积计算
- 将exe和dll文件打包成单一的启动文件
- 聚划算导航栏的反弹效果代码 纯原生js实现
热门文章
- dapper 多对多查询对象和对象列表
- gdb打印STL和boost容器
- python 中的metaclass和baseclasses
- 20145239杜文超 《Java程序设计》第7周学习总结
- 【详解】消息队列和线程关系
- vc通过ADO连接sql server 2000的核心代码
- 直接通过ADO操作Access数据库(修改版)
- npm的常用操作---npm工作笔记003
- MQTT工作笔记0006---CONNECT控制报文3
- Git工作笔记004---torisegit使用时Updates were rejected because the tip of your current branch i