美文网首页
TS-12 类型体操

TS-12 类型体操

作者: RickyWu585 | 来源:发表于2023-03-16 07:49 被阅读0次
  • 递归
type A = ['ji','ni','tai','mei']

type Reverse<Arr extends unknown[]> = 
  Arr extends [...infer Rest,infer Last] ? [Last, ...Reverse<Rest>] : Arr

type Result = Reverse<A> // ['mei','tai','ni','ji']
  • infer可以理解为引用,也可以理解为声明变量,通常出现在条件类型,与 extends 一起使用
  • 实践:
  1. 元祖体操:模式匹配infer
// 元祖扩展
type A = [1]
type B = [...A,2]

// 取元祖的最后一个元素,这种方式也叫 模式匹配
type A = ['ji','ni','tai','mei']
type Last<T extends unknown[]> = T extends [...infer _ , infer L] ? L : never
type Result = Last<A>  // 'mei'
  1. 字符串体操
// 内置 Capitalize;Uppercase;Lowercase;Uncapitalize

// 模版字符串类型
type S = 'ji'
type R = `${S}` // 'ji'

// 取第一个字符,模式匹配
type S = "ji ni tai mei"
type First<T extends string> = T extends `${infer F} ${string}` ? F : never
type Result = First<S>

// 取最后一个单词
type S = "ji ni tai mei"
type LastWord<T extends string> = T extends `${infer F} ${infer L}` ? LastWord<L> : T
type Result = LastWord<S> // 'mei'

// 取最后一个字符
type S = "ji ni tai mei !"
type LastOfTuple<T extends unknown[]> = T extends [...infer Rest, infer F] ? F : never
type StringToTuple<T extends string> = 
T extends `${infer F}${infer Rest}` ? [F, ...StringToTuple<Rest>] : []
type LastOfString = LastOfTuple<StringToTuple<S>>  // '!'

// string 转 联合类型
type StringToUnion<T extends string> = 
  T extends `${infer F}${infer R}` ? F | StringToUnion<R> : never
type C = StringToUnion<'abc'>  // 'a' | 'b' | 'c'
  • 函数常用工具类型:ReturnTypeParameters(返回一个元祖类型,因为参数是数组)
const fn = (a:number,b:number) => 'a + b'
const fn1 = ({name,age}: {name: string, age: number}) => {}

type F = typeof fn // (a:number, b:number) => string

type R = ReturnType<F> // string
type MyReturnType<T extends (...args:any)=>any> = T extends (...args:any)=> infer R ? R : any

type P = Parameters<F> // [a:number,b:number]
type P2 = Parameters<typeof fn1> // [{name:string, age:number}]

相关文章

  • 类型体操

    不得不说,技术栈从js切换到ts的精力开销还是挺大的. 将之前已经做好的一个页面用TS重构, 居然花费了整整一天的...

  • TS 类型体操合集

    基本姿势 keyof keyof 返回一个类型的所有 key 的联合类型: 类型索引 类型索引可以通过 key 来...

  • Python | 标准的数据类型有哪些?

    本小节介绍 数字、字符串。对于列表、元组、集合、字典后续专门章节详细介绍各类型数据的具体操作 一、数字类型 ● 数...

  • Swift烧脑体操(六)- 类型推断

    前几天,一个朋友在微博上通过私信问了我一个问题,如下的代码,为什么变量 crr 没能把值为 nil 的元素过滤掉?...

  • RxJava学习笔记操作符学习(7)

    条件 / 布尔操作符 作用 通过设置函数,判断被观察者(Observable)发送的事件是否符合条件 类型 具体操...

  • 体操

    早上早操完连早餐都顾不得吃回宿舍倒头就睡,还好今天上午没课,睡了一上午,睡到了自然醒,以前都是无情的闹钟把熟睡的我...

  • 体操

    从前觉得有些难看的校服,而今再回首竟成了记忆里一道亮丽的风景线。 我自认为缺乏锻炼,这两天想来想去心生了做广播体操...

  • 千聊|千聊App | 如何创建直播话题

    ::APP如何建话题 具体操作如下: 【直播形式】 创建话题时,老师可以根据话题类型选择合适的直播形式,APP暂时...

  • RESTful接口规范

    HTTP动词 资源的具体操作类型,由HTTP动词表示。 常见的五个HTTP动词(括号对应SQL命令) GET (读...

  • 肖若腾平分摘银真不冤!中国体操忽视一点让队员屡次吃亏,没进步

    最近多哈世锦赛如火如荼的举行,中国体操代表团也最受体操迷关注,因为很多体操迷期待着中国体操的崛起。曾经中国体操曾是...

网友评论

      本文标题:TS-12 类型体操

      本文链接:https://www.haomeiwen.com/subject/cghbkdtx.html