interface Original {
name: string;
age: number;
married: boolean;
}
type Copy = {
[key in keyof Original]: Original[key];
}
/*
type Copy = {
name: string;
age: number;
married: boolean;
}
*/
in 연산자 오른쪽에는 유니언 타입이 와야 하므로 keyof 연산자를 사용해 Original의 속성 이름만 추렸습니다('name' | 'age' | 'married'). 속성 값의 타입은 인덱스 접근 타입을 사용해서 원래 객체의 타입을 가져옵니다. 여기서도 유니언 타입에 속한 타입들이 하나씩 순서대로 평가됩니다. 먼저 'name': Original['name']에서 'name': string이 속성이 되고, 'age': Original['age']에서 'age': number가 속성이 됩니다. 마지막으로 'married': Original['married']에서 married: boolean이 속성이 됩니다.