Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- returnType
- 성능최적화
- JS console
- const 단언문
- NonNullable
- vue.js
- javascript
- reactjs
- 타입스크립트
- react
- 폰트적용하기
- 커스텀
- 타입좁히기
- React Native
- typescript
- 티스토리꾸미기
- 반복줄이기
- 제네릭
- click and drag
- 누구나 자료구조와 알고리즘
- 공통컴포넌트
- Chart.js
- 2022
- 리액트
- 개발콘텐츠
- React.js
- CSS
- utilty type
- TSDoc
- 레이아웃쪼개기
Archives
- Today
- Total
몽땅뚝딱 개발자
[TypeScript] 제네릭(Generic) - 다시보기 본문
◽ 제네릭 사용하기
function logText<T>(text: T):T {
console.log(text);
return text;
}
logText<string>('안녕')
◽ 제네릭의 장점
유니온을 사용하는 경우 명확한 변수타입이 지정되지않아 생기는 문제들이 있었다.
제네릭은 호출시점에 타입을 지정하므로 이런 문제점을 해결할 수 있다.
function logText<T>(text: T):T {
console.log(text);
return text;
}
logText<string>('안녕')
logText<number>(123)
logText<boolean>(true)
◽ 제네릭 적용하기
[before]
// 이렇게 선언하는 경우 type에 따라 여러개의 인터페이스를 만들어주어야 한다.
// 유지보수면에서 효율성이 떨어진다.
interface DropdownStr {
value: string;
selected: boolean;
}
interface DropdownNum {
value: number;
selected: boolean;
}
const obj: DropdownStr = { value: 'abc', selected: false }
const obj: DropdownNum = { value: 1, selected: false }
[after]
// 제네릭을 사용하여 타입별로 아래와 같이 선언할 수 있다.
interface Dropdown<T> {
value: T;
selected: boolean;
}
const obj: Dropdown<number> = { value: 1, selected: false }
const obj: Dropdown<string> = { value: 'abc', selected: false }
◽ 제네릭 적용하기2
interface DropdownItem<T> {
value: T;
selected: boolean;
}
const emails: DropdownItem<string>[] = [
{ value: 'naver.com', selected: true },
{ value: 'gmail.com', selected: false },
{ value: 'hanmail.net', selected: false },
];
const numberOfProducts: DropdownItem<number>[] = [
{ value: 1, selected: true },
{ value: 2, selected: false },
{ value: 3, selected: false },
];
// 방법 1. 파라미터에 제네릭을 사용하기
function createDropdownItem(item: DropdownItem<number> | DropdownItem<string>) {
// ...
}
emails.forEach(function (email) {
const item = createDropdownItem(email);
});
// 방법 2. 함수 자체에 제네릭을 사용하기
function createDropdownItem<T> (item: DropdownItem<T>) {
// ...
}
emails.forEach(function (email) {
const item = createDropdownItem<string>(email);
});
◽ 제네릭 제한 (다시보기)
// 제네릭 타입 제한 2 - 정의된 타입 이용하기
interface LengthType {
length: number;
}
function logTextLength<T extends LengthType>(text: T): T {
text.length;
return text;
}
logTextLength(10); // error
// 제네릭 타입 제한 3 - keyof
interface ShppingItem {
name: string;
price: number;
stock: number;
}
function getShoppingItemOption<T extends keyof ShppingItem>(itemOption: T): T {
return itemOption;
}
getShoppingItemOption(10) // error
getShoppingItemOption<string>('a') // error
getShoppingItemOption("price") // key만 들어갈 수 있다.
출처
타입스크립트 입문 - 기초부터 실전까지 - 인프런 | 강의
타입스크립트를 시작하는 분들을 위한 강의입니다. 최신 자바스크립트 문법을 모르는 분들도 쉽게 배울 수 있도록 교과 과정을 구성하였습니다. 어렵게만 느껴지는 타입스크립트를 입문자 관
www.inflearn.com
'Development > Typescript' 카테고리의 다른 글
[TypeScript] 타입 선언과 타입 단언 (0) | 2022.11.13 |
---|---|
[TypeScript] Utility types - Exclude, Extract, Omit, Pick (0) | 2022.11.12 |
[TypeScript] 이넘(Enum) (0) | 2022.06.06 |
[TypeScript] 유니온 타입 vs 인터섹션 타입 (0) | 2022.06.06 |
[TypeScript] 인터페이스 (0) | 2022.06.06 |
Comments