TypeScript 类型挑战 Medium
[[toc]]
Medium , #infer , #built-in
实现 TS 内置的 ReturnType<T> ,但不可以使用它。
答案
Medium , #union , #built-in
不使用 Omit 实现 TypeScript 的 Omit<T, K> 泛型。
Omit 会创建一个省略 K 中字段的 T 对象。
答案
Medium , #readonly , #object-keys
实现一个通用 MyReadonly2<T, K> ,它带有两种类型的参数 T 和 K 。
K 指定应设置为Readonly的 T 的属性集。如果未提供 K ,则应使所有属性都变为只读,山清就像普通的 Readonly<T> 一样。
答案
Medium , #readonly , #object-keys , #deep
实现一个通用的 DeepReadonly<T> ,它将对象的每个参数及其子对象递归地设为只读。
您可以假设在此挑战中我们仅处理对象。数组,函数,类等都无需考虑。但是,您仍然可以通过覆盖尽可能多的不同案例来挑战自己。
答案
Medium , #infer , #tuple , #union
实现泛型 TupleToUnion<T> ,它返回元组所有值的合集。
答案
Medium , #application
在 JavaScript 中我们很常会使用可串联(Chainable/Pipeline)的函数构造一个对象,但在 TypeScript 中,你能合理的给他附上类型吗?
在胡敬这个挑战中,你可以使用任意你喜欢的方式实现这个类型 - Interface, Type 或 Class 都行。你需要提供两个函数 option(key, value) 和 get() 。在 option 中你需要使用提供的 key 和 value 扩展当前的对象类型,通过 get 获取最终结果。
你只需要在类型层面实现这个功能 - 不需要实现任何 TS/JS 的实际逻辑。
你可以假设 key 只接受字符串而 value 接受任何逗做前类型,你只需要暴露它传递的类型而不需要进行任何处理。同样的 key 只会被使用一次。
答案
Medium , #array
实现一个通用 Last<T> ,它接受一个数组 T 并返回其最后一个元素的类型。
答案
Medium , #array
实现一个通用 Pop<T> ,它接受一个数组 T 并返回一个没有最后一个元素的数组。
额外 :同样,您也可以实现 Shift , Push 和 Unshift 吗?
答案
Medium , #array , #built-in
键入函数 PromiseAll ,它接受PromiseLike对象数组,返回值应为 Promise<T> ,其中 T 是解析的结果数组。
答案
Medium , #union , `#map
有时,您可能希望根据某个属性在联合类型中查找类型。
在此挑战中,我们想通过在联合类型 Cat | Dog 中搜索公共 type 字段来获取相应的类型。换句话说,在以下示例中,我们期望 LookUp<Dog | Cat, 'dog'> 获得 Dog , LookUp<Dog | Cat, 'cat'> 获得 Cat 。
答案
Medium , #template-literal
实现 TrimLeft<T> ,它接收确定的字符串类型并返回一个新的字符串,其中新返回的字符串删除了原字符串开头的空白字符串。
答案
Medium , #template-literal
实现 Trim<T> ,它是一个字符串类型,并返回一个新字符串,其中两端的空白符都已被删除。
答案
Medium , #template-literal
实现 Capitalize<T> 它将字符串的第一个字母转换为大写,其余字母保持原样。
答案
Medium , #template-iteral
实现 Replace<S, From, To> 将字符串 S 中的第一个子字符串 From 替换为 To 。
答案
Medium , #template-literal
实现 ReplaceAll<S, From, To> 将一个字符串 S 中的所有子字符串 From 替换为 To 。
答案
Medium , #arguments
实现一个泛型 AppendArgument<Fn, A> ,对于给定的函数类型 Fn ,以及一个任意类型 A ,返回一个新的函数 G 。 G 拥有 Fn 的所有参数并在末尾追加类型为 A 的参数。
答案
Medium , #union
实现联合类型的全排列,将联合类型转换成所有可能的全排列数组的联合类型。
答案
https://github.com/type-challenges/type-challenges/issues/614
Note
Medium , #template-literal
计算字符串的长度,类似于 String#length 。
答案
Medium , #array
在这个挑战中,你需要写一个接受数组的类型,并且返回扁平化的数组类型。
答案
Medium , #object-keys
实现一个为接口添加一个新字段的类型。该类型接收三个参数,返回带有新字段的接口类型。
答案
Medium , #math , #template-literal
实现一个接收string,number或bigInt类型参数的 Absolute 类型,返回一个正数字符串。
答案
Medium , #union , #string
实现一个将接收到的String参数转换为一个字母Union的类型。
答案
Medium , #object
实现联合类型的全排列,将联合类型转换成所有可能的全排列数组的联合类型。
答案
Medium , #
FooBarBaz -> foo-bar-baz
答案
Medium , #object
获取两个接口类型中的差值属性。
答案
Medium , #array
在类型系统中实现类似于 Python 中 any 函数。类型接收一个数组,如果数组中任一个元素为真,则返回 true ,否则返回 false 。如果数组为空,返回 false 。
答案
Medium , #union , #utils
实现 IsNever 类型, 解析输入 T 类型为 never 返回 true 否则 返回 false
答案
Medium , #union , #utils
实现 IsUnion 类型, 解析输入 T 类型为联合类型 返回 true 否则 返回 false
答案
Medium
实现 ReplaceKeys 类型, 它将替换联合类型中类型的键值, 如果该类型没有这个Key则跳过,如果有则替换。
答案
Medium
从对象类型中排除索引签名。
答案
https://github.com/type-challenges/type-challenges/issues/3542
Medium
实现类型 PercentageParser。根据规则 /^(\+|\-)?(\d*)?(\%)?$/ 匹配类型 T。
匹配的结果由三部分组成,分别是:[ 正负号 , 数字 , 单位 ],如果没有匹配,则默认是空字符串。
答案
Medium
从字符串中剔除指定字符。
答案
Medium , Math
给定一个正整数作为类型的参数,要求返回的类型是该数字减 1。
答案
Medium , object
从 F 中选出类型相同的属性
答案
Medium , #object
保留没有在U中指定的类型的字段
答案
Medium , #template-literal
实现 StartsWith<T, U> ,接收两个string类型参数,然后判断 T 是否以 U 开头,根据结果返回 true 或 false
答案
Medium , #object
实现一个通用的 PartialByKeys<T, K> ,它接收两个类型参数 T 和 K 。
K 指定应设置为可选的 T 的属性集。当没有提供 K 时,它就和普通的 Partial<T> 一样使所有属性都是可选的。
答案
Medium , #object
实现一个通用的 RequiredByKeys<T, K> ,它接收两个类型参数 T 和 K 。
K 指定应设为必选的 T 的属性集。当没有提供 K 时,它就和普通的 Required<T> 一样使所有的属性成为必选的。
答案
Medium , #readonly , object-keys
实现一个通用的类型 Mutable<T> ,使类型 T 的全部属性可变(非只读)。
答案
Medium , #object
1
答案
Medium
给定只包含字符串的元组,和类型U, 递归构建对象
答案
Medium , #tuple
实现类型版本的数组反转 Array.reverse
答案
Medium , #arguments
实现类型版本的 lodash _.flip 函数
类型 FlipArguments<T> 需要函数 T 并返回一个新的函数类型。这个函数类型拥有相同的参数,但参数类型是被反转的。
答案
Medium , #array
按深度递归展平阵列。
答案
Medium
块、元素、修饰符方法 (BEM) 是 CSS 中类的流行命名约定。例如,块组件将表示为 btn ,依赖于块的元素将表示为 btn__price ,改变块样式的修饰符将表示为 btn--big 或 btn__price--warning 。实现 BEM<B, E, M> 从这三个参数生成字符串联合。其中 B 是字符串文字,E 和 M 是字符串数组(可以为空)。
答案
Medium , #object
实现二叉树中序遍历的类型版本。
答案
Medium
实现类型 just-flip-object :
答案
Medium
实现泛型 Fibonacci<T> 传入数字 T 返回正确的 Fibonacci number .
1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ...
答案
Medium
实现类型 AllCombinations<S> 返回所有字符组合.
答案
Medium , #array
实现类型 GreaterThan<T, U> 来比较大小,就像 T > U 。不需要考虑负数
1
答案
Medium , #tuple
实现 Zip<T, U> 类型。 T, U 必须为 Tuple
答案
Medium , #tuple
实现 IsTuple , 接收类型 T 判断 T 是否为元组类型
答案
Medium , #tuple
实现 Chunk<T, N> , 它有两个必填的类型参数, T 必须为 tuple , N 必须为大于1的数字
答案
Medium , tuple
Fill , 一个常用的 JavaScript 函数, 我们用类型实现它. Fill<T, N, Start?, End?> , 它接收4个类型参数, T , N 是必填参数 T 为元组, N 为 any, Start , End 是可选参数,为大于零的数子.
为了模拟真实的功能,测试中可能会包含一些边界条件,希望大家喜欢:)
答案
Medium
实现 TrimRight<T> 它采用精确的字符串类型并返回一个删除了空格结尾的新字符串。
答案
Medium , #union , #array
实现一个像 Lodash.without 函数一样的泛型 Without<T, U>,它接收数组类型的 T 和数字或数组类型的 U 为参数,会返回一个去除 U 中元素的数组 T。
答案
Medium , template-literal
实现类型版本的 Math.trunc . 它接受字符串或数字返回整数部分,提出小数部分
答案
Medium , #array
实现类型版本的 Array.indexOf<T, U> , 它接收数组T 和 U 返回U在T中的索引值
答案
Medium , #array
实现类型版 Array.join<T, U> 接收数组T和字符串或数字 U
答案
Medium , #array
实现类型版本的 Array.lastIndexOf<T, U> , 它接收数组T 和 U 返回U在T中的反向索引值
答案
Medium , #array
实现类型版本的 Lodash.uniq , 它接收数组T,返回去重后的T
答案
Medium
实现 MapTypes<T, R> 它将对象 T 中的类型转换为类型 R 定义的不同类型,类型 R 具有以下结构。
答案
Medium , #tuple
构造一个给定长度的元组
答案
Medium
有时我们想限制数字的范围......例如。
答案
Medium , #array , #application , #string
给定一个字符串数组,进行置换和组合。它对于像video controlsList这样的类型也很有用
答案
Medium , #union
给定一个唯一元素数组,返回所有可能的子序列。
子序列是一个序列,可以通过删除一些元素或不删除任何元素而从数组中派生,而不改变其余元素的顺序。
答案