[TS] keyof와 typeof 연산자

TIL

keyof 연산자

keyof 연산자는 객체 타입의 모든 프로퍼티 키를 String Literal Union 타입으로 추출하는 연산자이다.

 

객체의 프로퍼티 값을 가져오는 함수를 작성해보자.

interface Person {
  name: string;
  hp: number;
}

function getPropertyKey(person: Person, key: "name" | "hp") {
  return person[key];
}

const person: Person = {
  name: "woodstock",
  hp: 90,
};

getPropertyKey(person, "name");

이렇게 key의 타입을 "name" | "hp"로 정의하면 Person 타입에 프로퍼티가 추가되거나 수정될 때마다 이 타입도 함께 바꿔야 한다.

 

keyof 연산자를 사용하면 이 문제를 해결할 수 있다.

function getPropertyKey(person: Person, key: keyof Person) {
  return person[key];
}

keyof Person은 Person 타입의 모든 프로퍼티 키를 추출하여 "name" | "hp" 유니언 타입을 만든다.

 

주의사항

keyof 연산자는 타입에만 사용할 수 있다. 값과 함께 사용하면 오류가 발생한다.

 

typeof 연산자

자바스크립트의 typeof 연산자는 값의 타입을 문자열로 반환한다. 타입스크립트에서는 타입 정의에 사용하면 변수의 타입을 추론하는 기능도 있다.

const person = {
  name: "woodstock",
  hp: 90,
};

type Person = typeof person;
// type Person = { name: string; hp: number; }

 

keyof와 typeof 함께 사용하기

두 연산자를 함께 사용하면 더 유연하게 타입을 정의할 수 있다.

const person = {
  name: "woodstock",
  hp: 90,
};

function getPropertyKey(person: typeof person, key: keyof typeof person) {
  return person[key];
}

getPropertyKey(person, "name"); // woodstock

typeof person으로 person 객체의 타입을 추론하고, keyof typeof person으로 그 타입의 모든 키를 추출한다.

'TIL' 카테고리의 다른 글

[TS] 템플릿 리터럴 타입  (0) 2025.11.05
[TS] 맵드 타입  (0) 2025.11.05
[TS] 인덱스드 액세스 타입  (0) 2025.11.05
[CS50] 컴퓨팅 사고 - 알고리즘  (0) 2025.11.05
[CS50] 컴퓨팅 사고 - 정보의 표현  (0) 2025.11.04
'TIL' 카테고리의 다른 글
  • [TS] 템플릿 리터럴 타입
  • [TS] 맵드 타입
  • [TS] 인덱스드 액세스 타입
  • [CS50] 컴퓨팅 사고 - 알고리즘
고견
고견
개발 자국 남기기
  • 고견
    개발자국
    고견
  • 전체
    오늘
    어제
    • 분류 전체보기 (157) N
      • Frontend (29)
        • Next.js (16)
        • JavaScript (7)
      • CS (19) N
        • 자료구조 (9)
        • 알고리즘 (5)
        • 운영체제 (4) N
        • 네트워크 (1) N
      • TIL (93)
      • Dev Log (16)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    타입 좁히기
    함수 타입
    제네릭
    CS
    배열
    react
    문자열
    useState
    Spa
    C
    cs50
    javascript
    emotion diary
    인터페이스
    ai 감성 일기장
    클래스
    algorithm
    typescript
    App Router
    알고리즘
    페이지 라우터
    Pages Router
    memory
    Next.js
    generic
    바닐라 자바스크립트
    앱 라우터
    자료구조
    트러블 슈팅
    Trouble Shooting
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
고견
[TS] keyof와 typeof 연산자
상단으로

티스토리툴바