keyof 的问题

来源:8-13 【 TS 泛型类约束】 Vue3源码中的T extends object + extends keyof 【 Vue3源码应用】 1

rookie_white

2021-10-13

老师你好!
keyof会获取类中的public属性跟原型上方法集合的联合类型,如果我只想单独获取到原型上方法的联合类型或者是属性的联合类型,需要怎么写呢?

写回答

1回答

keviny79

2021-10-14

//  1.准备一个类

class Customer {

  custname!: string

  age!: number

  buy() {


  }

  eat() {


  }

}


// 2 实现

//TS 原型上都是类上定义的方法,屏蔽了单独使用原型定义属性和方法 

//  TS 属性都属于实例


//  2.1. 获取属性名组成的联合类型

type TypPropNameUnion<T> = {

  [F in keyof T]: T[F] extends Function ? never : F

}[keyof T]


type PropName = TypPropNameUnion<Customer>


//  2.2 TS 原型上都是类上定义的方法名组成的联合类型

type TypMethodNameUnion<T> = {

  [F in keyof T]: T[F] extends Function ? F : never

}[keyof T]


type MethodName = TypMethodNameUnion<Customer>


0
2
keviny79
回复
rookie_white
[keyof T] 获取的是——冒号:后面 T[F] extends Function ? never : F 执行的结果组成的联合类型,明白?
2021-10-14
共2条回复

晋级TypeScript高手,成为抢手的前端开发人才

轻松驾驭 TypeScript 高级用法, 突破前端成长瓶颈

871 学习 · 425 问题

查看课程