TypeScript-섹션8. 타입 조작하기-keyof & typeof 연산자(2)

손주완·2025년 7월 15일

Typescript Section8

목록 보기
3/5

선요약

  • keyof 연산자는 객체 타입에서 모든 프로퍼티 키를 문자열 리터럴 유니온 타입으로 추출함.
  • 수동으로 "name" | "age" 같은 키 목록을 명시하지 않고, 타입에서 자동 추출할 수 있어 유지보수에 용이함.
  • keyof는 타입에만 적용 가능하며, 값에는 사용할 수 없음.
  • typeof와 함께 사용하면 실제 변수의 타입 구조로부터 키를 추출하는 것도 가능함.

Keyof 연산자

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와 Keyof 함께 사용하기

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는 변수로부터 타입을 추론함.
  • 둘을 함께 사용하면 유지보수와 타입 안정성을 모두 챙길 수 있음.

0개의 댓글