【类型挑战】Exclude,难度⭐️

简介: 【类型挑战】Exclude,难度⭐️

知识运用:


  1. Exclude将从联合类型中排除特点的类型后输出剩余联合类型
  2. 条件类型运用
  3. 分布式条件类型运用


题目分析:


题目地址:43-easy-excludeimage.png

如上图所示我们需要设计一个与内置Exclude功能一致的类型工具,从已知的联合类型中排除指定类型后将剩余类型返回。


题目解答:


测试用例:

/* _____________ 测试用例 _____________ */
import { Equal, Expect } from '@type-challenges/utils'
type cases = [
    Expect<Equal<MyExclude<"a" | "b" | "c", "a">, Exclude<"a" | "b" | "c", "a">>>,
    Expect<Equal<MyExclude<"a" | "b" | "c", "a" | "b">, Exclude<"a" | "b" | "c", "a" | "b">>>,
    Expect<Equal<MyExclude<string | number | (() => void), Function>, Exclude<string | number | (() => void), Function>>>,
]


答案与解析:

  1. 我们需要从一组联合类型中得到排除后的类型,考虑到有条件的存在那我们就需要使用到Ts类型编程关于条件的处理(Conditional Types)
  1. 语法示例:SomeType extends OtherType ? TrueType : FalseType;
  2. 解释说明:当SomeType类型可以分配给OtherType时得到TrueType,反之得到FalseType,这里注意关键动词为分配,区别于原来条件的理解。
  1. 这道题运用到了条件类型中的分布式条件类型,使得可以支持联合类型,如文档示例,可以将我们传入的联合类型分别处理成对应的数组类型并联合后返回给我们
  1. type ToArray = Type extends any ? Type[] : never;
  2. type StrArrOrNumArr = ToArray<string | number>;
  1. 当我们的T中的联合类型可以分配个需要排除的类型U的情况下就直接返回never,表示永不可达,反之则返回类型。
/* _____________ 答案 _____________ */
type MyExclude<T, U> = T extends U ? never : T;


去演练场验证答案



相关文章
|
6月前
|
程序员 开发者
欢迎讨论--你见过哪些独特的代码注释
【5月更文挑战第11天】欢迎讨论--你见过哪些独特的代码注释
|
6月前
|
算法 Java API
Java注释的重要性及实践应用
Java注释的重要性及实践应用
91 0
|
测试技术 索引
【类型挑战】Includes,难度⭐️
【类型挑战】Includes,难度⭐️
156 0
【类型挑战】Includes,难度⭐️
|
前端开发 测试技术
【类型挑战】Awaited,难度⭐️
【类型挑战】Awaited,难度⭐️
129 0
【类型挑战】Awaited,难度⭐️
|
测试技术
【类型挑战】If,难度⭐️
【类型挑战】If,难度⭐️
111 0
【类型挑战】If,难度⭐️
|
测试技术 索引
【类型挑战】实现 Readonly,难度⭐️
【类型挑战】实现 Readonly,难度⭐️
187 0
【类型挑战】实现 Readonly,难度⭐️
|
测试技术 索引
【类型挑战】实现 Pick,难度⭐️
【类型挑战】实现 Pick,难度⭐️
139 0
【类型挑战】实现 Pick,难度⭐️
|
JavaScript 前端开发 测试技术
【类型挑战】Concat,难度⭐️
【类型挑战】Concat,难度⭐️
142 0
【类型挑战】Concat,难度⭐️
|
测试技术
【类型挑战】Push,难度⭐️
【类型挑战】Push,难度⭐️
129 0
【类型挑战】Push,难度⭐️
|
JavaScript 测试技术
【类型挑战】Parameters,难度⭐️
【类型挑战】Parameters,难度⭐️
129 0
【类型挑战】Parameters,难度⭐️