Deep Readonly
提出詳細
type DeepReadonly<T> = { readonly [key in keyof T]: // T[key]がobjectでない場合、 keyof T[key]は neverになる、ということを条件に使い、 keyof T[key] extends never ? // オブジェクトでない場合はそのものの型、オブジェクトの場合は再帰でDeepReadonlyを呼び出し T[key] : DeepReadonly<T[key]> }
提出日時 | 2022-07-13 07:08:06 |
---|---|
問題 | Deep Readonly |
ユーザー | aa-0921 |
ステータス | Accepted |
import type { Equal, Expect } from '@type-challenges/utils' type cases = [ Expect<Equal<DeepReadonly<X>, Expected>>, ] type X = { a: () => 22 b: string c: { d: boolean e: { g: { h: { i: true j: 'string' } k: 'hello' } l: [ 'hi', { m: ['hey'] }, ] } } } type Expected = { readonly a: () => 22 readonly b: string readonly c: { readonly d: boolean readonly e: { readonly g: { readonly h: { readonly i: true readonly j: 'string' } readonly k: 'hello' } readonly l: readonly [ 'hi', { readonly m: readonly ['hey'] }, ] } } }