TypeScript | 青训营笔记

81 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 4 天

今天大佬讲了一手typeScript入门,可以说讲的很细致了,不仅讲了基础语法还想不少高级类型例如联合类型和交叉类型,可以说是收益匪浅,咱也可以发现ts在目前前端开发的受欢迎程度是在不断提高 在过去的几年中,TypeScript的受欢迎程度一直在增长,各个大型开源库也有很多转向ts,我想ts的优点至少有以下三点

  • 更早发现 BUG
  • 丰富的 IDE 功能
  • 重构代码更容易
  • 使大型项目的代码更易阅读

缺点也显而易见,首先是typescript不是真正的静态类型,有的时候图省事就直接any一把梭哈,写到最后发现成了anyscript,其次是学习成本很高,然后学习成本很高,尤雨溪曾写过一篇Vue3 跟着尤雨溪学 TypeScript 之 Ref 类型从零实现,咱就是说,认为自己用了挺久的ts学的应该差不多了,但看到尤大Ref的实现还是被绕的一愣一愣的,以下是实现

export interface Ref<T = any> {
  [isRefSymbol]: true
  value: T
}

export function ref<T>(value: T): T extends Ref ? T : Ref<UnwrapRef<T>>

export type UnwrapRef<T> = {
  cRef: T extends ComputedRef<infer V> ? UnwrapRef<V> : T
  ref: T extends Ref<infer V> ? UnwrapRef<V> : T
  array: T
  object: { [K in keyof T]: UnwrapRef<T[K]> }
}[T extends ComputedRef<any>
  ? 'cRef'
  : T extends Array<any>
    ? 'array'
    : T extends Ref | Function | CollectionTypes | BaseTypes
      ? 'ref' // bail out on types that shouldn't be unwrapped
      : T extends object ? 'object' : 'ref']

这是ts???,鼠鼠觉得自己白学了,先别气馁,这个应该(打引号)是比较极端的案例,但ts的高级骚操作真的不少(虽然我从来没用过),其实也有很多非前端方向使用ts,典型的就是tsToLua,当初随便投了个tsToLua的简历,没想到真让鼠鼠去面试了,于是前一天晚上就去看了手,虽然没过但也让鼠鼠见了世面,讲远了,说了这么多还是建议大伙能用ts就用ts,显式类型使我们代码可读性更高,我们的注意力会放在系统的不同部分如何相互作用,这也是为什么大型项目最好用ts的原因,咱能够在记住上下文的同时抽象出系统的其余部分,可以说是又节约了精力又降低了bug出现的概率