TypeScript ·
TypeScript类型
1、不可变类型
type DeepReadonly<T> =
T extends Date ? Omit<Date, 'setDate' | 'setFullYear' | 'setMonth' | 'setTime' | 'setHours' | 'setMinutes' | 'setSeconds' | 'setMilliseconds' | 'setUTCDate' | 'setUTCFullYear' | 'setUTCMonth' | 'setUTCHours' | 'setUTCMinutes' | 'setUTCSeconds' | 'setUTCMilliseconds'> :
T extends RegExp ? T :
T extends (...args: any[]) => any ? T :
T extends Array<infer U> ? ReadonlyArray<DeepReadonly<U>> :
T extends Map<infer K, infer V> ? ReadonlyMap<DeepReadonly<K>, DeepReadonly<V>> :
T extends Set<infer U> ? ReadonlySet<DeepReadonly<U>> :
T extends object ? { readonly [P in keyof T]: DeepReadonly<T[P]> } :
T;
