2๊ฐ ์ด์์ ์ ๋ค๋ฆญ ์ ์ฉํด๋ณด๊ธฐ
์ด์
function map(array: unknown[], f: (item: unknown) => unknown): unknown[] {
let result = [];
for (let i = 0; i < array.length; i++) {
result[i] = f(array[i]);
}
return result;
}
์ ์ฉ ํ
function map<T,U>(array: T[], f: (item: T) => U): U[] {
let result = [];
for (let i = 0; i < array.length; i++) {
result[i] = f(array[i]);
}
return result;
}
: ์ธ์ ๋ฐฐ์ด ๋ฉค๋ฒ์ ํ์ ์ ๋๋ณํ๋ T, ๋ฐํ ๋ฐฐ์ด ๋ฉค๋ฒ ํ์ ์ ๋๋ณํ๋ U, ์ด๋ ๊ฒ ๋๊ฐ์ง ์ ๋ค๋ฆญ ํ์ ์ด ํ์ํ๋ค.
T ํ์ ์ ์์๋ฅผ ํฌํจํ๋ ๋ฐฐ์ด์ ์ ๋ฌํ๋ฉด ๋งคํํจ์๊ฐ Tํ์ ์ ๊ฐ์ ๊ฐ์ง๊ณ Uํ์ ์ ๊ฐ์ ๋ณํํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ต์ข ์ ์ผ๋ก Uํ์ ์ ํญ๋ชฉ์ ํฌํจํ๋ ๋ฐฐ์ด์ ๋ฐํํ๋ค.
.map์ ์๋๋ ์ฌ์ค์ T์ ๋ฐฐ์ด์ U์ ๋ฐฐ์ด๋ก ๋งคํํ๋ค
ํธ์ถ๊ฒฐ๊ณผ
function map<T>(array: T[], f: (item: T) => T): T[] {
let result = [];
for (let i = 0; i < array.length; i++) {
result[i] = f(array[i]);
}
return result;
}
console.log(map(["์ฌ๊ณผ", "๋ธ๊ธฐ", "์ฒญํฌ๋"], (_) => "๊ณผ์ผ")); //[ '๊ณผ์ผ', '๊ณผ์ผ', '๊ณผ์ผ' ]
function map<T, U>(array: T[], f: (item: T) => U): U[] {
let result = [];
for (let i = 0; i < array.length; i++) {
result[i] = f(array[i]);
}
return result;
}
console.log(
map(
[{ ๊ณผ์ผ: "๋ธ๊ธฐ" }, { ๊ณผ์ผ: "์ฒญํฌ๋" }, { ๊ณผ์ผ: "์ฌ๊ณผ" }],
(_) => _.๊ณผ์ผ === "์ฌ๊ณผ"
)
); //[ false, false, true ]
1๊ฐ๋ ๋ ์ฝ๋ค
์ด์
function filter(array: unknown[], f: (item: unknown) => boolean): unknown[] {
let result = [];
// tslint:disable-next-line: prefer-for-of
for (let i = 0; i < array.length; i++) {
let item = array[i];
if (f(item)) {
result.push(item);
}
}
return result;
}
์ ์ฉ ํ
function filter<T>(array: T[], f: (item: T) => boolean): T[] {
let result = [];
// tslint:disable-next-line: prefer-for-of
for (let i = 0; i < array.length; i++) {
let item = array[i];
if (f(item)) {
result.push(item);
}
}
return result;
}
let names = [{ ์ด๋ฆ: "smith" }, { ์ด๋ฆ: "kate" }, { ์ด๋ฆ: "max" }];
//1. T๋ number๋ก ํ์ ๋จ
console.log(filter([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], (_) => _ > 5)); //[ 6, 7, 8, 9, 10 ]
//2. T๋ string์ผ๋ก ํ์ ๋จ
console.log(filter(["a", "b", "ab", "b", "c"], (_) => _ !== "b")); //[ 'a', 'ab', 'c' ]
//3. T๋ {์ด๋ฆ:string}์ผ๋ก ํ์ ๋จ
console.log(filter(names, (_) => _.์ด๋ฆ.endsWith("h"))); //[ { '์ด๋ฆ': 'smith' } ]
์ ๋ค๋ฆญ๋ ๋ช ์์ ์ผ๋ก ์ง์ ํ ์ ์์ง๋ง ์ ๋ค๋ฆญ์ ํ์ ์ ๋ช ์ํ ๋๋ ๋ชจ๋ ํ์ํ ์ ๋ค๋ฆญ ํ์ ์ ๋ช ์ํ๊ฑฐ๋ ๋ฐ๋๋ก ์๋ฌด๊ฒ๋ ๋ช ์ํด์๋ ์๋๋ค.
์ถ๋ก
function map<T, U>(array: T[], f: (item: T) => U): U[] {
let result = [];
for (let i = 0; i < array.length; i++) {
result[i] = f(array[i]);
}
return result;
}
console.log(map(["๋ธ๊ธฐ", "์ฒญํฌ๋", "์ฌ๊ณผ"], (_) => _ === "์ฌ๊ณผ")); //[ false, false, true ]
๋ช ์
function map<T, U>(array: T[], f: (item: T) => U): U[] {
let result = [];
for (let i = 0; i < array.length; i++) {
result[i] = f(array[i]);
}
return result;
}
console.log(
map<string, boolean>(["๋ธ๊ธฐ", "์ฒญํฌ๋", "์ฌ๊ณผ"], (_) => _ === "์ฌ๊ณผ")
); //[ false, false, true ]
<์ค๊ฐ์์ฝ>
์ ๋ค๋ฆญ๋ ๋ช ์์ ์ผ๋ก ์ง์ ํ ์ ์์ง๋ง ์ ๋ค๋ฆญ์ ํ์ ์ ๋ช ์ํ ๋๋ ๋ชจ๋ ํ์ํ ์ ๋ค๋ฆญ ํ์ ์ ๋ช ์ํ๊ฑฐ๋ ๋ฐ๋๋ก ์๋ฌด๊ฒ๋ ๋ช ์ํด์๋ ์๋๋ค.
function map<string> ( // ์๋ฌ TS2558: ๋ ๊ฐ์ ํ์
์ธ์๊ฐ ํ์ํ๋ฐ ํ ๊ฐ๋ง ์ ๋ฌ๋จ
// ...
)
function map<T, U>(array: T[], f: (item: T) => U): U[] {
let result = [];
for (let i = 0; i < array.length; i++) {
result[i] = f(array[i]);
}
return result;
}
console.log(
map<string, boolean>(["๋ธ๊ธฐ", "์ฒญํฌ๋", "์ฌ๊ณผ"], (_) => _ === "์ฌ๊ณผ")
); //[ false, false, true ]
function map<T, U>(array: T[], f: (item: T) => U): U[] {
let result = [];
for (let i = 0; i < array.length; i++) {
result[i] = f(array[i]);
}
return result;
}
console.log(
map<string, number>(["๋ธ๊ธฐ", "์ฒญํฌ๋", "์ฌ๊ณผ"], (_) => _ === "์ฌ๊ณผ")
//'boolean'ํ์์ 'number'ํ์์ ํ ๋นํ ์ ์์ต๋๋ค. ~~~~~~~~~~
); //[ false, false, true ]
์ ๋ค๋ฆญ ์ฌ๋ฌ๊ฐ์ง ์คํ์ผ
1. T์ ๋ฒ์๋ฅผ ๊ฐ๋ณ ์๊ทธ๋์ฒ๋ก ํ์ ํ ์ ์ฒด ํธ์ถ ์๊ทธ๋์ฒ
//ํ์
์คํฌ๋ฆฝํธ๋ filterํ์
์ ํจ์๋ฅผ ํธ์ถํ ๋ ์ด ์๊ทธ๋์ฒ์ T๋ฅผ ๊ตฌ์ฒด ํ์
์ผ๋ก ํ์ ํ๋ค
//๊ฐ๊ฐ์ filterํธ์ถ์ ์์ ๋ง์ Tํ์ ๊ฐ์ ๊ฐ๋๋ค
type Filter = {
<T>(array: T[], f: (item: T) => boolean): T[]
}
let filter: Filter = (array, f) // ....
2. T์ ๋ฒ์๋ฅผ ๋ชจ๋ ์๊ทธ๋์ฒ๋ก ํ์ ํ ์ ์ฒด ํธ์ถ ์๊ทธ๋์ฒ
//T๋ฅผ Filter ํ์
์ ์ผ๋ถ๋ก ์ ์ธํ์ผ๋ฏ๋ก ํ์
์คํฌ๋ฆฝํธ๋ Filter ํ์
์ ํจ์๋ฅผ ์ ์ธํ ๋ T๋ฅผ ํ์ ํ๋ค.
type Filter<T> = {
(array: T[], f: (item: T) => boolean): T[]
}
let filter: Filter<number> = // ....
3. 1์ ๋จ์ถ ํธ์ถ ์๊ทธ๋์ฒ
type Filter = <T>(array: T[], f: (item: T) => boolean) => T[]
let filter: Filter = // ...
4. 2์ ๋จ์ถ ํธ์ถ ์๊ทธ๋์ฒ
type Filter<T> = <T>(array: T[], f: (item: T) => boolean) => T[]
let filter: Filter<string> = // ...
5. T๋ฅผ ์๊ทธ๋์ฒ ๋ฒ์๋ก ํ์ ํ, ์ด๋ฆ์ ๊ฐ๋ ํจ์ ํธ์ถ ์๊ทธ๋์ฒ
//ํ์
์คํฌ๋ฆฝํธ๋ filter ํจ์๋ฅผ ํธ์ถํ ๋ ์ด ์๊ทธ๋์ฒ์ T๋ฅผ ๊ตฌ์ฒด ํ์
์ผ๋ก ํ์ ํ๋ค
//๊ฐ๊ฐ์ filterํธ์ถ์ ์์ ๋ง์ Tํ์ ๊ฐ์ ๊ฐ๋๋ค
function filter<T>(array: T[], f: (item: T) => boolean): T[] {
let result = [];
// tslint:disable-next-line: prefer-for-of
for (let i = 0; i < array.length; i++) {
let item = array[i];
if (f(item)) {
result.push(item);
}
}
return result;
}
type Filter<T> = { (array: T[], f: (iter: T) => boolean): T[] };
let names = [{ ์ด๋ฆ: "smith" }, { ์ด๋ฆ: "kate" }, { ์ด๋ฆ: "max" }];
//1. T๋ number๋ก ํ์ ๋จ
console.log(filter([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], (_) => _ > 5)); //[ 6, 7, 8, 9, 10 ]
//2. T๋ string์ผ๋ก ํ์ ๋จ
console.log(filter(["a", "b", "ab", "b", "c"], (_) => _ !== "b")); //[ 'a', 'ab', 'c' ]
//3. T๋ {์ด๋ฆ:string}์ผ๋ก ํ์ ๋จ
console.log(filter(names, (_) => _.์ด๋ฆ.endsWith("h"))); //[ { '์ด๋ฆ': 'smith' } ]
์ ์๊ฐ์ ๋๋์ ์คํ์ผ๋ง
//filter์ ํ์
์๊ทธ๋์ฒ
type Filter = { <T>(array: T[], f: (iter: T) => boolean): T[] };
let filter: Filter = (array, f) => {
let result = [];
// tslint:disable-next-line: prefer-for-of
for (let i = 0; i < array.length; i++) {
let item = array[i];
if (f(item)) {
result.push(item);
}
}
return result;
};
let names = [{ ์ด๋ฆ: "smith" }, { ์ด๋ฆ: "kate" }, { ์ด๋ฆ: "max" }];
//1. T๋ number๋ก ํ์ ๋จ
console.log(filter([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], (_) => _ > 5)); //[ 6, 7, 8, 9, 10 ]
//2. T๋ string์ผ๋ก ํ์ ๋จ
console.log(filter(["a", "b", "ab", "b", "c"], (_) => _ !== "b")); //[ 'a', 'ab', 'c' ]
//3. T๋ {์ด๋ฆ:string}์ผ๋ก ํ์ ๋จ
console.log(filter(names, (_) => _.์ด๋ฆ.endsWith("h"))); //[ { '์ด๋ฆ': 'smith' } ]
<์ด์ํ ์ํฉ>
ํ์ ์คํฌ๋ฆฝํธ๋ ์ ๋ค๋ฆญ ํจ์๋ก ์ ๋ฌํ ์ธ์์ ์ ๋ณด๋ฅผ ์ด์ฉํด ์ ๋ค๋ฆญ์ ๊ตฌ์ฒดํ์ ์ ์ถ๋ก ํ๋ฏ๋ก ๋๋ก๋ ๋ค์๊ณผ ๊ฐ์ ์ํฉ์ด ๋ฒ์ด์ง ์ ์๋ค.
let promise = new Promise((resolve) => resolve(45));
promise.then((result) => result * 4);
//~~~~~~ ๊ฐ์ฒด๊ฐ ์ ์ ์๋ ํ์์
๋๋ค.
ํ์ ์คํฌ๋ฆฝํธ์ ์ถฉ๋ถํ ์ ๋ณด๋ฅผ ์ ๊ณตํ์ง ์์๊ธฐ ๋๋ฌธ์ ์ผ์ด๋ ์๋ฌ์ด๋ค.
ํ์ ์คํฌ๋ฆฝํธ๋ ์ ๋ค๋ฆญ ํจ์์ ์ธ์์๋ง ์์งํ์ฌ ์ ๋ค๋ฆญ ํ์ ์ ์ถ๋ก ํ๋๋ฐ, ์ธ์๊ฐ ์๋ฌด ๊ฒ๋ ์์ผ๋ ๊ธฐ๋ณธ์ ์ผ๋ก T๋ฅผ ์ ์ ์๋ค๊ณ ๋ฐฉ์นํ๋ ๊ฒ์ด๋ค!
Promise์ ์ ๋ค๋ฆญ ํ์ ๋งค๊ฐ๋ณ์๋ฅผ ๋ช ์ํด์ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค.
let promise = new Promise<number>((resolve) => resolve(45));
promise.then((result) => console.log(result * 4)); //180
'TypeScript > ํ์ ์คํฌ๋ฆฝํธ TypeScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ์ ์คํฌ๋ฆฝํธ] OOP ๋คํ์ฑ, ์์ ๊ฐ๋ ํ์คํ๊ฒ ์ ๋ฆฌ (0) | 2022.04.21 |
---|---|
[ํ์ ์คํฌ๋ฆฝํธ] ์ ๋ค๋ฆญ ํ์ ๋ณ์นญ (0) | 2022.04.21 |
[ํ์ ์คํฌ๋ฆฝํธ] ํจ์ํธ์ถ ์๊ทธ๋์ฒ์ ์ ๋ค๋ฆญ (0) | 2022.04.21 |
[ํ์ ์คํฌ๋ฆฝํธ] ํธ์ถ ์๊ทธ๋์ฒ(ํ์ ์๊ทธ๋์ฒ)๋? (0) | 2022.04.20 |
TS๋ก ์ฝ๋ฐฑ ํจ์, ์ค์ฒฉ ํจ์, ๊ณ ์ฐจ ํจ์ ๊ตฌํ (0) | 2022.04.20 |