打字稿检查'any'类型

时间:2019-04-05 18:18:14

标签: typescript

是否可以使用打字稿条件检查确切的any类型?

type IsAny<T> = T extends any ? true : never

type A = IsAny<any> // true
type B = IsAny<number> // never
type C = IsAny<unknown> // never
type D = IsAny<never> // never

2 个答案:

答案 0 :(得分:8)

是的,您可以测试any

type IfAny<T, Y, N> = 0 extends (1 & T) ? Y : N; 
type IsAny<T> = IfAny<T, true, never>;
type A = IsAny<any> // true
type B = IsAny<number> // never
type C = IsAny<unknown> // never
type D = IsAny<never> // never

对此的解释在this answer中。简而言之,any是故意不健全的,并且违反了正常的类型规则。您可以检测到这种违规,因为它会让您疯狂地进行一些操作,例如将0分配给1

答案 1 :(得分:0)

另一种检测 IsAny 的方法:

type IsAny<T> = (
  unknown extends T
    ? [keyof T] extends [never] ? false : true
    : false
);

result of IsAny with some values

相关问题