如何将任意TypeScript类型转换为字符串?
如何将任意TypeScript类型转换为字符串?
我想把任意给定的TypeScript类型转换成字符串形式,自己写了一段代码,但覆盖不了很多场景。这个问题解决起来难度不小,不想重复造轮子,想问有没有成熟的解决方案?
type UnionToIntersection<U> = (U extends any ? (arg0: U) => void : never) extends ( arg0: infer I, ) => void ? I : never type LastOf<T> = UnionToIntersection<T extends any ? () => T : never> extends () => infer R ? R : never type UnionToTuple< T, L = LastOf<T>, Res = [T] extends [never] ? [] : [...UnionToTuple<Exclude<T, L>>, L], > = Res type ConvertAnyTypeToAString<T> = T extends | string | number | boolean | bigint | undefined | null ? `${T}` : T extends symbol ? 'symbol' : T extends Function ? 'function' : T extends Date ? 'Date' : T extends Error ? 'Error' : T extends RegExp ? 'RegExp' : T extends Map<infer K, infer V> ? `Map<${ConvertAnyTypeToAString<K>},${ConvertAnyTypeToAString<V>}>` : T extends WeakMap<infer K, infer V> ? `WeakMap<${ConvertAnyTypeToAString<K>},${ConvertAnyTypeToAString<V>}>` : T extends Set<infer K> ? `Set<${ConvertAnyTypeToAString<K>}>` : T extends WeakSet<infer K> ? `WeakSet<${ConvertAnyTypeToAString<K>}>` : T extends Promise<infer K> ? `Promise<${ConvertAnyTypeToAString<K>}>` : T extends object ? ObjectToString<T> : 'not handled' export type ObjectToString< T extends object, RemainingKeys extends (keyof any)[] = UnionToTuple<keyof T> extends (keyof any)[] ? UnionToTuple<keyof T> : never, Separator extends string = ',', Result extends string = '', > = RemainingKeys extends [infer H extends keyof T, ...infer Rest extends (keyof any)[]] ? ObjectToString< T, Rest, Separator, '' extends Result ? `{${ConvertAnyTypeToAString<H>}:${ConvertAnyTypeToAString<T[H]>}` : `${Result}${Separator}${ConvertAnyTypeToAString<H>}:${ConvertAnyTypeToAString<T[H]>}` > : `${Result}}` const sym1 = Symbol('hello') type U1 = ObjectToString<{ a: 1; b: 2; c: 3; 1: 2, [sym1]:'A' }>
内容的提问来源于stack exchange,提问作者TrevTheDev
相关产品推荐
相关产品推荐

