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 | 29 | 30 | 31 |
Tags
- React.js
- TSDoc
- 개발콘텐츠
- const 단언문
- javascript
- vue.js
- JS console
- returnType
- NonNullable
- 폰트적용하기
- CSS
- 커스텀
- Chart.js
- 티스토리꾸미기
- 성능최적화
- click and drag
- 반복줄이기
- 타입스크립트
- utilty type
- 2022
- typescript
- 리액트
- 누구나 자료구조와 알고리즘
- reactjs
- React Native
- 레이아웃쪼개기
- 공통컴포넌트
- react
- 제네릭
- 타입좁히기
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만 들어갈 수 있다.
출처
'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