Notice
Recent Posts
Recent Comments
Link
250x250
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 파이썬 slice
- 리액트
- 리액트 공식문서
- 파이썬 반복문
- 타입스크립트
- 코딩테스트
- 내일배움캠프
- React Hooks
- 파이썬 for
- 자바스크립트
- typeScript
- 내일배움캠프 최종 프로젝트
- 리액트 프로젝트
- 파이썬 enumerate
- 타입스크립트 props
- Next 팀 프로젝트
- 파이썬 for in
- useEffect
- REACT
- tanstack query
- JavaScript
- 프로그래머스
- useState
- 파이썬 replace
- 내배캠 프로젝트
- 파이썬 딕셔너리
- 리액트 훅
- 타입스크립트 리액트
- 내일배움캠프 프로젝트
- 한글 공부 사이트
Archives
- Today
- Total
sohyeon kim
[TS] keyof & typeof 연산자 본문
728x90
💡 타입스크립트에서 자주 쓰는 두 연산자에 대해 알아보자
먼저 keyof ~
interface Product {
id: string;
name: string;
price: number;
membersOnly?: boolean;
}
// 프로퍼티 이름 타입 지정
type ProductProperty = 'id' | 'name' | 'price' | 'membersOnly';
// 사용자에게 보여줄 키들을 productTableKeys 변수에 배열로 담아준다.
const productTableKeys: ProductProperty[] = ['name', 'price', 'membersOnly'];
const product: Product = {
id: 'c001',
name: '주전자',
price: 129000,
membersOnly: true,
};
for (let key of productTableKeys) {
console.log(`${key} | ${product[key]}`);
}
// name | 주전자
// price | 129000
// membersOnly | true
Product 타입에 새 프로퍼티가 추가된다고 해보자.
interface Product {
id: string;
name: string;
price: number;
salePrice: number; // ** 여기 추가
membersOnly?: boolean;
}
type ProductProperty = 'id' | 'name' | 'price' | 'salePrice' | 'membersOnly'; // * 여기 수정
두 곳에 값을 추가하고 있어서 유지보수에 좋지 않다.
이럴 때 keyof 연산자를 쓰면 좋다!
interface Product {
id: string;
name: string;
price: number;
salePrice: number;
membersOnly?: boolean;
}
type ProductProperty = keyof Product; // Product 타입의 모든 프로퍼티 이름에 해당하는 타입을 생성!
배열에 새 요소를 추가하려고 보면 자동완성도 된다 ~
😲 또, 타입 별칭을 쓰지 않고 바로 할당도 가능하다.
const productTableKeys: (keyof Product)[] = ['name', 'price', 'membersOnly'];
이제 typeof ~
console.log(typeof product); // object
타입의 타입을 찍어보니 오브젝트가 나온다.
이건 js 코드이기 때문에 결과값이 문자열이다.
typeof 를 이용해 타입을 지정하면
소문자 product 를 추론해 대문자 Product 타입을 지정한다.
여기선 js 와 달리, 결과값이 문자열이 아닌 타입스크립트 타입이라는 점!
** 이미 존재하는 타입을 가져와 타입을 정리할 때 사용한다!
~ 활용 ~
interface Item {
id: string;
name: string;
price: number;
description: string;
}
const itemTable: [keyof Item, string][] = [
['name', '이름'],
['price', '가격'],
['description', '설명'],
];
const item: Item = {
id: 'h001',
name: '힐링 포션',
price: 200,
description: '마시면 체력을 50 회복한다.',
};
for (let [propertyKey, propertyName] of itemTable) {
console.log(`${propertyName} | ${item[propertyKey]}`);
}
// 이름 | 힐링 포션
// 가격 | 200
// 설명 | 마시면 체력을 50 회복한다.
728x90
반응형
'TypeScript' 카테고리의 다른 글
[TS] Pick, Omit, Exclude : Generic 을 사용한 유틸리티 타입, 객체 프로퍼티 고르기, 생략하기 & Union 제거 (1) | 2024.03.05 |
---|---|
[TS] generic 제네릭 타입 <string> ~ <number> ~ <???> ~ (0) | 2024.03.05 |
[TS] intersection & 타입 합치기 (0) | 2024.03.04 |
[TS] union | 타입 연산하기 (0) | 2024.03.04 |
[TS] Type Aliase 타입 별칭 : 변수처럼 타입에 이름 붙이기 (0) | 2024.03.04 |