type XFromTypeNames = (TypeNames extends readonly [infer Left extends string, ...infer Right extends string[]] ? XFromTypeNames> : Result); type XFromTypeName = (TypeName extends 'object' ? object : TypeName extends 'array' ? {} : TypeName extends 'boolean' ? boolean : TypeName extends 'integer' ? number : TypeName extends 'number' ? number : TypeName extends 'null' ? null : TypeName extends 'string' ? string : TypeName extends 'bigint' ? bigint : TypeName extends 'symbol' ? symbol : TypeName extends 'undefined' ? undefined : TypeName extends 'void' ? void : TypeName extends 'asyncIterator' ? {} : TypeName extends 'constructor' ? {} : TypeName extends 'function' ? {} : TypeName extends 'iterator' ? {} : unknown); export type XStaticType = (TypeName extends string[] ? XFromTypeNames : TypeName extends string ? XFromTypeName : unknown); export {};