TS的类型转换

41,305次阅读
没有评论

共计 792 个字符,预计需要花费 2 分钟才能阅读完成。

TS 的类型转换

元组类型转联合类型

TS 的类型转换

元组类型转联合类型 2

TS 的类型转换

联合类型转交叉类型

TS 的类型转换

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

(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 作为结果

对象属性转联合类型

TS 的类型转换

键值对转对象属性

TS 的类型转换

其他

去除 readonly

TS 的类型转换

in 遍历时用 as 断言约束

TS 的类型转换

是否为联合类型

TS 的类型转换

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

是否为 never 类型

TS 的类型转换

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

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

函数柯里化

在这里插入图片描述

原文地址: TS 的类型转换

    正文完
     0
    Yojack
    版权声明:本篇文章由 Yojack 于2024-09-28发表,共计792字。
    转载说明:
    1 本网站名称:优杰开发笔记
    2 本站永久网址:https://yojack.cn
    3 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
    4 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
    5 本站所有内容均可转载及分享, 但请注明出处
    6 我们始终尊重原创作者的版权,所有文章在发布时,均尽可能注明出处与作者。
    7 站长邮箱:laylwenl@gmail.com
    评论(没有评论)