์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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
- ํ์
- type
- ํจ์
- ํ๋ก ํธ์๋
- ์๋ฌ
- ํ์ค
- Redux
- ์๋ฐ์คํฌ๋ฆฝํธ
- ๊ฐ๋ฐ์
- ๋ด์ผ๋ฐฐ์
- ์๊ณ ๋ฆฌ์ฆ
- NEXT
- ๋ถํธ์บ ํ
- trainning
- ๋ฆฌ์กํธ
- native
- ์จ๋ผ์ธ
- JS
- JavaScript
- ์ฝ๋ฉ
- PROJECT
- wil
- API
- Firebase
- react
- ๋ณ์
- K-Digital
- ํ๋ก์ ํธ
- rn
- ๋ด์ผ๋ฐฐ์์บ ํ
Archives
- Today
- Total
Frontend ๊ฐ๋ฐ์ - hyo.loui
ํ์ ์คํฌ๋ฆฝํธ - Generic (์ ๋ค๋ฆญ) ๋ณธ๋ฌธ
๐ฏ๋ชฉ์ :
TS Generic (์ ๋ค๋ฆญ), ์ ๋ฆฌ ๋ฐ ๋ณต์ต
1. ์ ๋ค๋ฆญ ์ด๋?
์ ๋ค๋ฆญ์ ํ์ ์ ๋ง์น ํจ์์ ํ๋ผ๋ฏธํฐ์ฒ๋ผ ์ฌ์ฉ ํ๋ ๊ฒ์ด๋ค
๋ง๋ก๋ง ํ๋ฉด ๊ฐ์ด ์ ์์ค๊ณ ์ดํด๊ฐ ์๋๋ค.
ํ์ง๋ง ํ๋ผ๋ฏธํฐ์ ์๊น์์ ๋์กฐํด์ ๋จธ๋ฆฟ์์ ๋ ์ฌ๋ ค์ผ ์ดํด๊ฐ ์ ๋๋ค
// Generic
function generic<T>(any: T): T {
return any;
}
generic<number>(1); // 1
generic<string>("1"); // "1"
generic<boolean>(true); // true
function ํจ์๋ช <T>
์ฌ๊ธฐ <T>๋ฅผ ๋ฐ๋ผ์ ํ์ ์ด ์ ๋ฌ๋๊ณ
ํ๋ผ๋ฏธํฐ์ ํจ์ํ์
: T ์ ์ ๋ฌ๋๋ค!
2. ์ ๋ค๋ฆญ ํ์ฉ
1. getIteArray ๋ ๋ฐฐ์ด(ํ๋ผ๋ฏธํฐ)์์, index(ํ๋ผ๋ฏธํฐ)๋ฒ์งธ์ ์๋ ๊ฒ์ ์ฐพ๋ ํจ์
2. pushItemArray ๋ ๋ฐฐ์ด(ํ๋ผ๋ฏธํฐ)์ item(ํ๋ผ๋ฏธํฐ)๋ก ๋ค์ด์จ ๊ฐ์ ์ถ๊ฐ(push)ํด์ฃผ๋ ํจ์
function getItemArray<T>(arr: T[], index: number): T {
return arr[index];
}
function pushItemArray<T>(arr: T[], item: T): void {
arr.push(item);
}
const nums = [1, 2, 3, 4];
const techStack = ["js", "react", "redux"];
getItemArray(nums, 3); // 4
pushItemArray(nums, 5); // [1,2,3,4,5]
getItemArray(techStack, 2); // "redux"
pushItemArray(techStack, "RTK"); // ["js", "react", "redux", "RTK"]
3. ์ ๋ค๋ฆญ ํ์ ๋ณ์
2๊ฐ์ง ์์ ๋ฅผ ๋ณด๋ฉฐ ์๊ฐํด๋ณด์
// ์ ๋ค๋ฆญ ํ์
๋ณ์
function printout<T>(input: T): T[] {
console.log(input.length); // Error ํ๋ผ๋ฏธํฐ๋ก ๋ค์ด์ค๋ ํ์
์ด array๊ฐ ์๋๊ธฐ ๋๋ฌธ์ .length๊ฐ ํ์ฉ์ด ์๋๋ค
return input;
}
function printout<T>(input: T[]): T[] {
console.log(input.length);
return input;
}
printout<number>([1, 2, 3, 4]); // 4
์๋ฌ ์์ด ์ ์ ์๋ํ๋ค!
4. ์ ๋ค๋ฆญ ์ ์ฝ ์กฐ๊ฑด
// ์ ๋ค๋ฆญ ์ ์ฝ ์กฐ๊ฑด
interface LengthWise {
length: number;
}
function printOutt<T extends LengthWise>(input: T): T {
console.log(input.length);
return input;
}
// printOutt(19); // Error, ์ซ์ ํ์
์๋ `length`๊ฐ ์กด์ฌํ์ง ์์ผ๋ฏ๋ก ์ค๋ฅ ๋ฐ์
const test = printOutt({ length: 4, value: "hi" }); // `input.length` ์ฝ๋๋ ๊ฐ์ฒด์ ์์ฑ ์ ๊ทผ๊ณผ ๊ฐ์ด ๋์ํ๋ฏ๋ก ์ค๋ฅ ์์
console.log("๐๐ test", test);
// 4
// ๐๐ test { length: 4, value: 'hi' }
์ต์ข ์ ๋ฆฌ
- ์ ๋ค๋ฆญ์ ์ฌ์ฉํ๋ฉด ํจ์์ ํ๋ผ๋ฏธํฐ ์ฒ๋ผ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค!
- <T>๋ก ์ ๋ฌ๋ฐ์ T ์์ ํ์ฉ ๊ฐ๋ฅํ๋ค.
- ์ ๋ค๋ฆญ ํ์ ๋ณ์๋ก T[ ] ๋ก ๋ง๋ค๋ฉด ๋ฐฐ์ดํ์ ์ด ๋๋ค.
- ์ ์ฝ์กฐ๊ฑด์ผ๋ก extends๋ฅผ ํ์ฉํด ํ๋ผ๋ฏธํฐ ํ์ ์ ์ถ๊ฐํ ์ ์๋ค.
'Typescript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํ์ ์คํฌ๋ฆฝํธ - ํ์ ์ถ๋ก (Type Inference) (0) | 2023.01.20 |
---|---|
ํ์ ์คํฌ๋ฆฝํธ - interface extension(์ธํฐํ์ด์ค ํ์ฅ) (0) | 2023.01.19 |
ํ์ ์คํฌ๋ฆฝํธ - interface (์ธํฐํ์ด์ค) (0) | 2023.01.18 |
ํ์ ์คํฌ๋ฆฝํธ - Type Alias (ํ์ ๋ณ์นญ) (0) | 2023.01.18 |
ํ์ ์คํฌ๋ฆฝํธ - Union (์ ๋์จ) ํ์ (0) | 2023.01.17 |