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
);
