派生的类型

keyof (后面跟的是一个类型,返回一个新的类型)

  • 多为key字符的联合类型
type A = {
	name: string,
	age: number
}
type B = keyof A // 'name' | 'age'
  • 如果类型用了索引签名
type A = {
	[n:number]:unknown
}
type B = keyof A //number
----------------------------
type C = {
	[k:string]:unknown
}
type D = keyof C // number | string

索引访问类型(获取属性值的类型)

interface Person = {
	age: number,
	name: string
}
// 中括号里放的是一个类型,如下'age'也是一个字面量类型
type Age = Person['age'] // number
type A = Person['age' | 'name'] // number | string

typeof

const myArr = [
	{name: 'jim', age: 18},
	{name: 'tom', age: 20}
]
// typeof + 索引访问类型的结合使用
type Person = typeof myArr[number]	// {name: string, age: number}
type Age = typeof myArr[number]['age'] // number

条件类型

  • 用type来定义的泛型
  • 通过extends约束作为判断,来进行衍生
  • 传入的是联合类型,将得到分布式的结果
interface IdLabel {
	id: number
}
interface NameLabel {
	name: string
}
type NameOrId<T extends string | number> = T extends number ? IdLabel: NameLabel
------------------------------------------------
interface Email {
	message: string
}
type Messageof<T> = T extends {message: unknown} ? T['message'] : never
type MessageContent = Messageof<Email > // string
--------------------------------------------------------
// 传入的是联合类型,将得到分布式的结果
type ToArray<T> = T extends any ? T[] : never
type StrArrOrNumArr = ToArray<string | number> // string[] | number[]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值