美文网首页
typescript 类型挑战01 - IsOption

typescript 类型挑战01 - IsOption

作者: 头上有煎饺 | 来源:发表于2022-01-21 09:58 被阅读0次

1.基础

关于typescript类型编程的基础看看官网的介绍基本上就够了,这里就不赘述了,主要是记录下个人学习的一些东西,实现的思路。

2.IsOption

实现可以判断某个键值是否可选

type IsOptional<O, K extends keyof O> = Partial<Pick<O, K>> extends Pick<O, K> ? true: false
type test = {
  a?: string
  b: number
}
type res = IsOptional<test, 'a'> // true

3.思路

3.1如果用js实现,将会是这样

  const obj = {
    key1: 'optional',
    key2: 'require'
  }
  function isOptional(obj, key) {
    return obj[key] === 'optional'
  }
  isOptional(obj, 'key1')

关键的一步就是obj[key] === 'optional',想办法判断目标和“可选标记”是否相等

3.2获取目标我们可以用自带的Pick

  type test = {
    a?: string
    b: number
  }
  type target = Pick<test, 'a'>

3.3获取了目标我们需要做比较,那么和什么东西作比较呢?

我们无法获知属性上的“可选标记”,但是我们可以把目标和另一个长得和目标一样的类型(只不过属性是可选的)作对比

  type test = {
    a?: string
    b: number
  }
  type target = Pick<test, 'a'>
  // 构造可选
  type other = Partial<Pick<test, 'a'>>
  // 对比
  type isOptional = target extends other ? true : false

相关文章

网友评论

      本文标题:typescript 类型挑战01 - IsOption

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