首页 > 其他分享 >[Typescript Challenges] 15. Medium - Omit

[Typescript Challenges] 15. Medium - Omit

时间:2022-09-06 15:12:45浏览次数:115  
标签:Typescript string _____________ title completed Omit Challenges interface type

Implement the built-in Omit<T, K> generic without using it.

Constructs a type by picking all properties from T and then removing K

For example

interface Todo {
  title: string
  description: string
  completed: boolean
}

type TodoPreview = MyOmit<Todo, 'description' | 'title'>

const todo: TodoPreview = {
  completed: false,
}

 

Have to use remapping keywrod as[P in keyof T as P extends K ? never: P], cannot just do [P in keyof T extends K...]

https://www.typescriptlang.org/docs/handbook/release-notes/typescript-4-1.html#key-remapping-in-mapped-types

/* _____________ Your Code Here _____________ */

type MyOmit<T, K> = {
  [P in keyof T as P extends K ? never: P]: T[P]
}


/* _____________ Test Cases _____________ */
import type { Equal, Expect } from '@type-challenges/utils'
type x = MyOmit<Todo, 'description'>
type cases = [
  Expect<Equal<Expected1, MyOmit<Todo, 'description'>>>,
  Expect<Equal<Expected2, MyOmit<Todo, 'description' | 'completed'>>>,
]

// @ts-expect-error
type error = MyOmit<Todo, 'description' | 'invalid'>

interface Todo {
  title: string
  description: string
  completed: boolean
}

interface Expected1 {
  title: string
  completed: boolean
}

interface Expected2 {
  title: string
}

 

标签:Typescript,string,_____________,title,completed,Omit,Challenges,interface,type
From: https://www.cnblogs.com/Answer1215/p/16661867.html

相关文章

  • Typescript类型体操 - Append Argument
    题目中文实现一个泛型AppendArgument<Fn,A>,对于给定的函数类型Fn,以及一个任意类型A,返回一个新的函数G。G拥有Fn的所有参数并在末尾追加类型为A的参数。typeF......
  • Typescript类型体操 - Parameters
    题目中文实现内置的Parameters<T>类型,而不是直接使用它,可参考TypeScript官方文档。例如:constfoo=(arg1:string,arg2:number):void=>{}typeFunctionParams......
  • Typescript类型体操 - ReplaceAll
    答案中文实现ReplaceAll<S,From,To>将一个字符串S中的所有子字符串From替换为To。例如typereplaced=ReplaceAll<'types','',''>//期望是'types'......
  • Typescript类型体操 - Replace
    题目中文实现Replace<S,From,To>将字符串S中的第一个子字符串From替换为To。例如typereplaced=Replace<'typesarefun!','fun','awesome'>//期望是......
  • 2022 年要改掉的 10 个 TypeScript 坏习惯
    2022年要改掉的10个TypeScript坏习惯TypeScript和JavaScript在过去几年中不断进步,我们在过去几十年中建立的一些实践已经过时。有些可能永远没有意义。下面列出......
  • 使用 Node.js 构建基于 Typescript 的命令行界面 (CLI)
    使用Node.js构建基于Typescript的命令行界面(CLI)我们的目标是使用Typescript创建一个基于Node.js的命令行界面(CLI)。此设置包括顶级等待支持和ES模块导入。......
  • Typescript类型体操 - Trim
    题目中文实现Trim<T>,它是一个字符串类型,并返回一个新字符串,其中两端的空白符都已被删除。例如typetrimed=Trim<'HelloWorld'>//expectedtobe'HelloWorld......
  • Typescript类型体操 - Trim Left
    题目中文实现TrimLeft<T>,它接收确定的字符串类型并返回一个新的字符串,其中新返回的字符串删除了原字符串开头的空白字符串。例如typetrimed=TrimLeft<'HelloWo......
  • Typescript类型体操 - Promise.all
    题目中文键入函数PromiseAll,它接受PromiseLike对象数组,返回值应为Promise<T>,其中T是解析的结果数组。constpromise1=Promise.resolve(3);constpromise2=42;cons......
  • Typescript类型体操 - Type Lookup
    题目中文有时,您可能希望根据某个属性在联合类型中查找类型。在此挑战中,我们想通过在联合类型Cat|Dog中搜索公共type字段来获取相应的类型。换句话说,在以下示例中,我们......