平时工作自认为有 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 泛型用法相关推荐

  1. 一个线程中lock用法的经典实例

    1 /* 2 该实例是一个线程中lock用法的经典实例,使得到的balance不会为负数 3 同时初始化十个线程,启动十个,但由于加锁,能够启动调用WithDraw方法的可能只能是其中几个 4 作者: ...

  2. php中一个经典的!==的用法

    php中一个经典的!==的用法 1 <?php 2 $str = 'Every time you bleed for reaching greatness.'; 3 $cha = 'E'; 4 ...

  3. NPM 安装 TypeScript 和 npm 的 Invalid package.json 错误以及运行第一个typescript程序

    TypeScript 是 JavaScript 的一个超集,支持 ECMAScript 6 标准(ES6 教程). TypeScript 由微软开发的自由和开源的编程语言. TypeScript 设计 ...

  4. 【Flutter】Dart 数据类型 List 集合类型 ( 定义集合 | 初始化 | 泛型用法 | 初始化后添加元素 | 集合生成函数 | 集合遍历 )

    文章目录 I . 定义集合并初始化 II . 集合泛型用法 III . 集合添加元素 IV . 集合生成函数 V . 集合遍历 VI . 集合示例代码 I . 定义集合并初始化 定义并初始化 List ...

  5. typescript的keyof的用法

    第一种:与接口一起用,返回联合类型 interface Person {name: string;age: number;location: string;}type K1=keyof Person; ...

  6. typescript keyof 和 typeof 用法

    typeof 操作符可以用来获取一个变量或对象的类型 const states = {name: 1,block: () => {return '123'}, }同一个类型的数据,直接获取它的类 ...

  7. TypeScript 之泛型

    文章出自个人博客 https://knightyun.github.io/2021/04/18/js-ts-generic-type,转载请申明 背景 泛型用于创建可复用的支持多种类型的组件,比如不仅 ...

  8. C# ListT泛型用法

    C# List<T>用法 所属命名空间:using System.Collections.Generic; List<T>类是  ArrayList 类的泛型等效类. 该类使用 ...

  9. React + TypeScript 实现泛型组件

    泛型类型 TypeScript 中,类型(interface, type)是可以声明成泛型的,这很常见. interface Props<T> {content: T; } 这表明 Pro ...

最新文章

  1. Linux系统调用--getrlimit()与setrlimit()函数详解
  2. how to find your partner
  3. oracle 地市 区县分组,oracle分组写法 - 挣扎在陌生城市ITMAN的个人空间 - OSCHINA - 中文开源技术交流社区...
  4. 我的PDF阅读器之muPDF的编译
  5. 实用供暖通风空调设计手册 第三版_实用供热空调设计手册(第三版)“流体输配与水力平衡”技术专题讨论会...
  6. cad2020打印样式放在哪个文件夹_2019年中级考试准考证打印时间!错过将无法参加考试...
  7. 2021年下半年软件设计师上午真题答案及解析(一)
  8. ecshop怎么写原生php,ecshop二次开发的简单实例
  9. PHP实现简单的注册页面(正则表达式练习)
  10. 音视频编解码学习详解h264 ,mpeg4 ,aac 等音视频格式
  11. 免费logo设计在线生成
  12. 如何自己制作CHM电子书?
  13. 对自己的反思 (闲暇中的面试总结)
  14. 前端常用事件案例——抽名字(抽奖)/搜索下拉菜单/微博文本框
  15. office 论文 页码_WORD目录,页眉,页脚,页码设置技巧 为你的毕业论文收藏吧-以Word 2013演示...
  16. NOI2015 Day1 T2 软件包管理器 树链剖分
  17. MISRA 2004 VS MISRA 2012
  18. 数字信号处理实验线性卷积与循环卷积计算
  19. 将exe和dll文件打包成单一的启动文件
  20. 聚划算导航栏的反弹效果代码 纯原生js实现

热门文章

  1. dapper 多对多查询对象和对象列表
  2. gdb打印STL和boost容器
  3. python 中的metaclass和baseclasses
  4. 20145239杜文超 《Java程序设计》第7周学习总结
  5. 【详解】消息队列和线程关系
  6. vc通过ADO连接sql server 2000的核心代码
  7. 直接通过ADO操作Access数据库(修改版)
  8. npm的常用操作---npm工作笔记003
  9. MQTT工作笔记0006---CONNECT控制报文3
  10. Git工作笔记004---torisegit使用时Updates were rejected because the tip of your current branch i