IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    TypeScript挑战(九)- 实现 Omit

    Durban发表于 2020-10-20 20:46:03
    love 0

    TypeScript Challenge - 实现 Omit<T, K>

    题目


    实现 Omit<T, K>

    不使用 Omit 实现 TypeScript 的 Omit<T, K> 范型。

    Omit 会创建一个省略 K 中字段的 T 对象。

    例如:

    interface Todo {
      title: string
      description: string
      completed: boolean
    }
    
    type TodoPreview = MyOmit<Todo, 'description' | 'title'>
    
    const todo: TodoPreview = {
      completed: false,
    }

    测试用例


    import { Equal, Expect } from '@type-challenges/utils'
    
    type cases = [
      Expect<Equal<Expected1, MyOmit<Todo, 'description'>>>,
      Expect<Equal<Expected2, MyOmit<Todo, 'description' | 'completed'>>>
    ]
    
    interface Todo {
      title: string
      description: string
      completed: boolean
    }
    
    interface Expected1 {
      title: string
      completed: boolean
    }
    
    interface Expected2 {
      title: string
    }

    答案

    type MyOmit<T, K> = {
      [P in Exclude<keyof T,K>]: T[P]
    }

     



沪ICP备19023445号-2号
友情链接