After some exploration, I've managed to solve the issue on my own:
type IsUnionCollection<T, U extends T = T> = T extends unknown ? ([U] extends [T] ? false : true) : false;
type IsStringText<A> = IsUnionCollection<A> extends true ? false : A extends string ? (string extends A ? false : true) : false;
type IsNumberValue<A> = IsUnionCollection<A> extends true ? false : A extends number ? (number extends A ? false : true) : false;
type IsBooleanValue<A> = IsUnionCollection<A> extends true ? false : A extends boolean ? (boolean extends A ? false : true) : false;
type IsLiteralValue<A> = IsStringText<A> extends true ? true : IsNumberValue<A> extends true ? true : IsBooleanValue<A> extends true ? true : false;
I incorporated IsUnionCollection functionality because I needed:
type IsStringUnionText = IsLiteralValue<'a' | 'b'> // false
If this doesn't meet your needs, here is an alternative approach:
type IsStringText<A> = A extends string ? (string extends A ? false : true) : false;
type IsNumberValue<A> = A extends number ? (number extends A ? false : true) : false;
type IsBooleanValue<A> = A extends boolean ? (boolean extends A ? false : true) : false;
type IsLiteralValue<A> = IsStringText<A> extends true ? true : IsNumberValue<A> extends true ? true : IsBooleanValue<A> extends true ? true : false;