awesome-typescript icon indicating copy to clipboard operation
awesome-typescript copied to clipboard

「重学TS 2.0 」TS 练习题第三十九题

Open semlinker opened this issue 4 years ago • 5 comments
trafficstars

实现 IsAny 工具类型,用于判断类型 T 是否为 any 类型。具体的使用示例如下所示:

type IsAny<T> = // 你的实现代码

type I0 = IsAny<never> // false
type I1 = IsAny<unknown> // false
type I2 = IsAny<any> // true

请在下面评论你的答案

semlinker avatar Sep 25 '21 13:09 semlinker

type IsAny<T> = 0 extends 1 & T ? true : false;

type I0 = IsAny<never>; // false
type I1 = IsAny<unknown>; // false
type I2 = IsAny<any>; // true

思路: 利用任何类型和any交叉都等于any来实现。

zhaoxiongfei avatar Sep 26 '21 00:09 zhaoxiongfei

// unknown 只能赋给 unknown 或者 any
type IsAny<T> = [unknown] extends [T] ? ([T] extends [string] ? true : false) : false

type I0 = IsAny<never> // false
type I1 = IsAny<unknown> // false
type I2 = IsAny<any> // true

981377660LMT avatar Oct 25 '21 02:10 981377660LMT

type IsAny<T> = [unknown] extends [T] ? [T] extends [string] ? true : false : false

type I0 = IsAny // false type I1 = IsAny // false type I2 = IsAny // true

jackwangwj avatar Dec 15 '21 08:12 jackwangwj

// 解法: any的特性是与任意值并得出的值为本身
// 我们随便找两个不同的值即可
type IsAny<T> = 'a' extends 'b' & T ? true : false

ChangerHe avatar May 29 '22 16:05 ChangerHe

几何之美

// 实现 IsAny 工具类型,用于判断类型 T[] 是否为 any 类型。具体的使用示例如下所示:
// type IsAny<T[]> = // 你的实现代码
// type I0 = IsAny<never> // false
// type I1 = IsAny<unknown> // false
// type I2 = IsAny<any> // true

type IsAny<T> = T[] extends never[]
  ? false
  : T[] extends string[]
  ? T[] extends number[]
    ? T[] extends boolean[]
      ? T[] extends object[]
        ? T[] extends unknown[]
          ? T[] extends symbol[]
            ? T[] extends null[]
              ? T[] extends undefined[]
                ? T[] extends bigint[]
                  ? T[] extends any[]
                    ? true
                    : false
                  : false
                : false
              : false
            : false
          : false
        : false
      : false
    : false
  : false
type I00 = IsAny<never> // false
type I11 = IsAny<unknown> // false
type I22 = IsAny<any> // true

ChuTingzj avatar Jun 14 '22 13:06 ChuTingzj