keyof 연산자는 객체 타입에서 모든 프로퍼티 키를 문자열 리터럴 유니온 타입으로 추출함."name" | "age" 같은 키 목록을 명시하지 않고, 타입에서 자동 추출할 수 있어 유지보수에 용이함.keyof는 타입에만 적용 가능하며, 값에는 사용할 수 없음.typeof와 함께 사용하면 실제 변수의 타입 구조로부터 키를 추출하는 것도 가능함.keyof 연산자는 객체 타입으로부터 프로퍼티의 모든 key들을 String Literal Union 타입으로 추출하는 연산자임.
다음은 keyof 연산자를 사용하는 예시임.
interface Person {
name: string;
age: number;
}
function getPropertyKey(person: Person, key: "name" | "age") {
return person[key];
}
이렇게 키를 명시하면 Person 타입이 바뀔 때마다 "name" | "age"를 함께 바꿔줘야 하는 번거로움이 생김.
interface Person {
name: string;
age: number;
location: string; // 추가됨
}
function getPropertyKey(person: Person, key: "name" | "age" | "location") {
return person[key];
}
이럴 때 keyof 연산자를 쓰면 유지보수가 쉬워짐.
interface Person {
name: string;
age: number;
location: string;
}
function getPropertyKey(person: Person, key: keyof Person) {
return person[key];
}
keyof Person의 결과는 "name" | "age" | "location"이 됨.
주의할 점: keyof는 값이 아닌 타입에만 적용할 수 있음.
function getPropertyKey(person: Person, key: keyof person) { // ❌ 오류
return person[key];
}
typeof 연산자는 값을 기반으로 타입을 추론할 수 있게 해주는 타입스크립트의 기능임.
const person = {
name: "이정환",
age: 27,
location: "서울"
};
type Person = typeof person;
// Person 타입은 { name: string; age: number; location: string }이 됨
이걸 활용해 keyof와 함께 쓰면 다음과 같이 사용 가능함.
function getPropertyKey(person: typeof person, key: keyof typeof person) {
return person[key];
}
이렇게 하면 변수의 구조에 따라 자동으로 키 타입이 추출되므로 더 안정적이고 유연한 타입 선언이 가능함.
keyof는 타입으로부터 프로퍼티 키들을 추출해 유니온 타입으로 만듦.typeof는 변수로부터 타입을 추론함.