【类型挑战】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;


去演练场验证答案



相关文章
|
7月前
|
前端开发 JavaScript 网络协议
No112.精选前端面试题,享受每天的挑战和学习
No112.精选前端面试题,享受每天的挑战和学习
No112.精选前端面试题,享受每天的挑战和学习
|
7月前
|
前端开发 JavaScript API
No164.精选前端面试题,享受每天的挑战和学习
No164.精选前端面试题,享受每天的挑战和学习
|
7月前
|
小程序 前端开发 JavaScript
No46.精选前端面试题,享受每天的挑战和学习
No46.精选前端面试题,享受每天的挑战和学习
|
7月前
|
前端开发 搜索推荐 算法
No54.精选前端面试题,享受每天的挑战和学习
No54.精选前端面试题,享受每天的挑战和学习
|
7月前
|
存储 监控 前端开发
No116.精选前端面试题,享受每天的挑战和学习
No116.精选前端面试题,享受每天的挑战和学习
|
7月前
|
JavaScript 前端开发 开发者
No29.精选前端面试题,享受每天的挑战和学习
No29.精选前端面试题,享受每天的挑战和学习
|
7月前
|
缓存 网络协议 前端开发
No107.精选前端面试题,享受每天的挑战和学习
No107.精选前端面试题,享受每天的挑战和学习
|
7月前
|
缓存 JavaScript 前端开发
No158.精选前端面试题,享受每天的挑战和学习
No158.精选前端面试题,享受每天的挑战和学习
|
7月前
|
存储 缓存 前端开发
No185.精选前端面试题,享受每天的挑战和学习
No185.精选前端面试题,享受每天的挑战和学习
No185.精选前端面试题,享受每天的挑战和学习
|
7月前
|
缓存 JavaScript 前端开发
No66.精选前端面试题,享受每天的挑战和学习
No66.精选前端面试题,享受每天的挑战和学习