TypeScript - lagra metadata-undertyp i en typ utan att påverka typen
Jag undrade om det är möjligt att lagra någon sorts metadata i en typ, så att den kan extraheras med en typfunktion, utan att faktiskt påverka värdet av själva typen.
Lekplats
type Meta1<T> = { meta: T }
type GetMeta1<T> = T extends Meta1<infer R> ? R : never;
type type1 = number | Meta1<string>; // should be just number
type meta1 = Meta1<type1> // ok
// I tried with never, but unfortunately it does not work
type Never<T> = never;
type Meta2<T> = Never<T>
type GetMeta2<T> = T extends Meta2<infer R> ? R : never;
type type2 = number | Meta2<string>; // ok
type meta2 = Meta2<type2> // never
// It's possible to create a type to get the required type value
type GetValue<T> = T extends Meta1<unknown> ? never : T;
type type3 = GetValue<number | Meta1<string>> // number
// But I'm specifically looking for a solution where GetValue does not have to be used
// A solution where the meta type can be somehow extracted, yet does not affect the
// main type in a practical way