实现
type DeepReadonly<T extends Record<string, unknown>> = {
readonly [P in keyof T]: T[P] extends Function
? T[P]
: T[P] extends Record<string, unknown>
? DeepReadonly<T[P]>
: T[P];
};
type X = {
x: {
a: 1
b: 'hi'
}
y: 'hey',
say: (name: string) => {},
1: '123',
arr: [{
x: 1
}]
}
type T = DeepReadonly<X>
/*
type T = {
readonly x: {
readonly a: 1
readonly b: 'hi'
}
readonly y: 'hey',
readonly say: (name: string) => {},
readonly 1: '123',
readonly arr: [{
x: 1
}];
}
*/