타입 연산자

keyof

타입의 모든 키를 유니온 타입으로 반환하는 타입 연산자, 보통 객체 타입의 속성 이름을 추출할 때 유용하다.

type Person = {
	name: string;
	age: number;
	isStudent: boolean;
}
type Keys = keyof Person;
// Keys = "name" | "age" | "isStudent"

type-challenge에서 readonly 등을 구현할 때 사용했다

type MyReadOnly<T> = {
	readonly [P in keyof T]: T[P]
}

type DeepReadonly<T> = {
	readonly [P in keyof T]: T[P] extends object
		? T[P] extends Function
		 ? T[P]
		 : DeepReadonly<T[P]> // recursive
		: T[P]
}