Typescript kontrollera för typen 'any'


Är det möjligt att kontrollera det exakta any-typen med TypeScript-villkor?

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

Svar #1

Ja, du kan testa för 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

Förklaringen till detta finns i detta svar. Kort sagt är any avsiktligt osäker och bryter mot de vanliga typreglerna. Du kan upptäcka detta brott eftersom det låter dig göra något galet som att tilldela 0 till 1.

Svar #2

ett annat sätt att upptäcka IsAny:

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

Relaterade artiklar