xiaoYuanDun
xiaoYuanDun
这题容易遗漏的地方是,需要判断当前类型是否为 any,其他没什么难度 ```ts // 判断当前类型是否为 any type IsAny = 0 extends (1 & T) ? true : false // 实现一个 Filter 工具类型,用于根据类型变量 F 的值进行类型过滤。具体的使用示例如下所示: type Filter = T extends [infer...
函数重载 ``` function f(a: string, b: string): string function f(a: number, b: number): number function f(a: string | number, b: string |number) { if (typeof a === 'string') { return...
用 `[]` 包裹 T,否则泛型参数会被当成一个裸类型处理,走 '条件式分布类型' 的判断逻辑,当泛型参数是 any 这种特殊值时,会得到分布后的类型 ```ts type IsNever = [T] extends [never] ? true : false type t1 = IsNever type t2 = IsNever type t3 =...
之前看到过一个其他人写的,感觉很强 ```ts type IsEqual = (() => S extends T ? 1 : 0) extends (() => S extends U ? 1 : 0) ? true : false type IsNever...
TS中没有直接对比数值的操作,所以需要用 extends 来代替,达到类似的目的,这里默认从一个空数组开始递增,每次判断这个数组的长度和 M,N 是否相同 - 辅助判断的数组 S 是从长度为 0 开始递增的,所以第一个和 L 相等的数一定是两个数中较小的那一个(有可能相等) - 若 N 与 L 相等,则 N M - 若 M 也不等于 L,则表示 M,N 都不匹配,增加 S...
向下递归时,变换一下两个 infer 变量的位置即可 ```ts type Reverse = T extends [infer R1, ...infer R2] ? [...Reverse, R1] : [] type R0 = Reverse // [] type R1 = Reverse // [3,...