TS的类型转换

TS的类型转换



元组类型转联合类型

在这里插入图片描述

元组类型转联合类型2

在这里插入图片描述

联合类型转交叉类型

在这里插入图片描述

将这个方法拆成两部分来看:

(U extends any ? (k: U) => void : never)是第一部分
extends (k: infer I) => void ? I : never是第二部分

先看第一部分,TS中如果泛型后跟extends且这个泛型在实际传值是联合类型,则会遍历这个联合类型,取出联合类型中的每个具体类型做实际操作,最后返回每个类型的结果的联合类型

U=string|number举例,第一部分实际上做的的操作是
(string extends any ? (k:string) => void :never) | (number extends any ? (k:number) => void :never)
简化之后的结果就是((k:string)=>void)|((k:number)=>void),这是两个函数类型的联合类型

再看第二部分,利用了infer的函数参数类型推断,翻译一下就是如果想要找出一个函数
使它满足一定条件后能被((k:string)=>void)|((k:number)=>void)赋值
那么这个函数一定是(k:string&number)=>void

从而推得函数参数类型是string&number作为结果


对象属性转联合类型

在这里插入图片描述

键值对转对象属性

在这里插入图片描述






其他

去除readonly

在这里插入图片描述

in 遍历时用 as 断言约束

在这里插入图片描述

是否为联合类型

在这里插入图片描述

联合类型作为泛型的时候 extends 会触发分发执行
联合类型T写成 [T] 就变成了普通类型,extends的时候不会分发执行


是否为never类型

在这里插入图片描述

never 是一个空的联合类型,因此要通过 [T] 将其变成普通类型,再去 extends

[T][never]为元组,作为包装类型,如果联合类型被包装过,就不会被展开。
另外,因为 never 类型不能扩展 never 类型,但是 never[] 可以扩展 never[]


函数柯里化

在这里插入图片描述

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Raccom

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值