[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)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

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

티스토리툴바