InflearnTS Chapter 21~23 - YDP-SPLOUNGE-CLUB/typescript-study GitHub Wiki
map ν¨μλ₯Ό Number μ μλ§λ ν¨μλ‘ λ§λ€μ΄ 보μλ€.
const b λ λ°λμ number μ κ°μ λ°κ³ number κ°μ λ΄λ³΄λ΄λλ‘ λ§λ€μκΈ°μ
((v: T) => T): T[] λ‘ ν΄κ²°μ΄ λλ€.
interface Arr<T> {
map(callback: (v: T) => T): T[];
}
const a: Arr<number> = [1, 2, 3];
const b = a.map((v) => v + 1); // [2, 3, 4]νμ§λ§ v.toString() κ°μ λ¬Έμμ΄λ‘ λ°κΎΈκ² λλ©΄ μ ν¨μλ ν΅νμ§ μλλ€.
number[] μ΄ μλ string[] λ₯Ό λ΄λ±κΈ° λλ¬Έμ΄λ€.
μ λ€λ¦ ν¨μλ‘ μΆκ°λ‘ μμ±ν΄λ³΄λ©΄.
interface Arr<T> {
map<S>(callback: (v: T) => S): S[];
}
const a: Arr<number> = [1, 2, 3];
const b = a.map((v) => v + 1); // [2, 3, 4]
const c = a.map((v) => v.toString()); // ['2', '3', '4'];
const d = a.map((v) => v % 2 === 0); // [false, true, false];λ§μ½μ index λ§€κ°λ³μκ° νμνλ€λ©΄ map ν¨μμ μΆκ°ν΄μ μμ±ν΄μΌνλ€.
interface Arr<T> {
map<S>(callback: (v: T, i: number) => S): S[];
}
const a: Arr<number> = [1, 2, 3];
const b = a.map((v, i) => v + 1); // [2, 3, 4]λ° ν¨μμ bλ λ§μ°¬κ°μ§λ‘ T μ체λ§μ κ³μ λ΄λ³΄λ΄λ κ²½μ°λ λ¬Έμ κ° μλ€.
νμ§λ§ λ€λ₯Έ νμ μ λ΄λ³΄λ΄λ κ²½μ°μλ κ·Έλ μ§ μλ€.
Arr<number | string> μ κ²½μ°μμ string λ§μ νν°λ§ ν΄μ λ΄λ³΄λ΄κ³ μΆμλ° νν° typeof v === string μμμ κ²°κ³Όλ (number | string)[] μ΄λ€.
ν΄λΉ λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄μλ 컀μ€ν νμ κ°λλ₯Ό ν΅ν΄μ νμ μΆλ‘ μ λ³κ²½μμΌμ€μΌ νλ€.
interface Arr<T> {
filter(callback: (v: T) => boolean): T[];
}
const a: Arr<number> = [1, 2, 3];
const b = a.filter((v) => v % 2 === 0); // [2]
const c: Arr<number | string> = [1, '2', 3, '4', 5];
const d = c.filter((v) => typeof v === string); // ['2', '4'] string[] // μλ μν¨μ»€μ€ν νμ κ°λλ₯Ό μ¬μ©ν΄μ v is S λΌλ 컀μ€ν νμ κ°λλ₯Ό λΆμ¬λ³΄μλ€.
νμ§λ§ μ μμ μΌλ‘ μλνμ§ μλλ€. v: T λΌκ³ μ μΈνμλλ° v λ S λ€ λΌκ³ λͺ μμ μΌλ‘ μ μΈν κ²μ΄ νμ μ€ν¬λ¦½νΈκ° λ°μλ€μ΄μ§ λͺ»νμλ€.
interface Arr<T> {
filter<S>(callback: (v: T) => v is S): S[];
// Error
// A type predicate's type must be assignable to its parameter's type.
// Type 'S' is not assignable to type 'T'.
// 'T' could be instantiated with an arbitrary type which could be unrelated to 'S'.
}
const a: Arr<number> = [1, 2, 3];
const d = c.filter((v) => typeof v === 'string');ν΄λΉ λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄μ S λ Tμ μνλ€λ κ²μ λͺ μν΄μ€μΌ νλ€. λν v λ string | number μ΄κΈ° λλ¬Έμ v μ κ΄ν 벨λ₯λ₯Ό 컀μ€ν νμ κ°λλ‘ λͺ μν΄μ€μΌ νλ€.
interface Arr<T> {
filter<S >(callback: (v: T) => v is S): S[];
}
const a: Arr<number | string> = [1, 2, 3, '4', '5'];
const d = c.filter((v): v is string => typeof v === 'string');ν¨μκ°μ μλ‘ λμ μ΄ κ°λ₯νκ°? μ λν ꡬλ³λ²
μμ μ½λ
function a(x: string): number {
return +x;
};
a('1'); // 1
type B = (x: string) => number | string;
const b: B = a; // OKfunction a λ number λ₯Ό λ°νκ°μΌλ‘ μ€μ νμ§λ§
type B λ number | string μ λ°νκ°μΌλ‘ λ°κ³ μλ€.
κ·Έλ°λ° const b λ a λΌλ λμ μ νμμ λ μ μμ μΌλ‘ μλνλ€.
리ν΄κ°μ λ λμ νμ μΌλ‘ λμ μ΄ κ°λ₯νλ€.
μ£Όμμ μ΄ μλ€. λ§€κ°λ³μμ μλ μ΄λ¬ν μν©μ΄ μμ μ΄ λλ€.
function a(x: string | number): number {
return 0;
}
type B = (x: string) => number;
let b: B = a;