μ λλ¦μ μ΄μ©ν΄ μ¬λ¬ νμ
μ λν΄ λμΌν κ·μΉμ κ°κ³ λμνλ νμ
μ μμ½κ³ μ°μνκ² μ μν μ μλ€.
λκΈ°λΆμ¬
λ€μμ μλ°μ€ν¬λ¦½νΈ ν¨μλ₯Ό μκ°ν΄λ³΄μ. μΈμλ‘ λ겨μ§λ λ°°μ΄μ νμ κ°μ νμ
μ κ°μΌλ‘ μ΄λ£¨μ΄μ Έ μλ€κ³ κ°μ νλ€.
function getFirstElem(arr) { if (!Array.isArray(arr)) { throw new Error('getFirstElemOrNull: Argument is not array!'); } if (arr.length === 0) { throw new Error('getFirstElemOrNull: Argument is an empty array!'); } return arr[0] ? arr[0] : null; }
λ°°μ΄μ λ°μ 첫 λ²μ§Έ μμκ° μμ μ κ·Έ μμλ₯Ό 리ν΄νλ λ§€μ° κ°λ¨ν ν¨μλ€.
λ¬Έμμ΄μ λ°°μ΄μ μΈμλ‘ νΈμΆνλ©΄ λ¬Έμμ΄ νμ
μ κ°μ, μ«μμ λ°°μ΄μ μΈμλ‘ νΈμΆνλ©΄ μ«μ νμ
μ κ°μ λ°νν κ²μ΄λ€. μ΄ ν¨μμ νμ
μ μ΄λ»κ² μ μν μ μμκΉ?
λ§μ½ getFirstElemμ΄ λ¬Έμμ΄κ³Ό μ«μ λ νμ
λ§μ μ§μνλ€λ©΄ ν¨μ μ€λ²λ‘λ©μ μ΄μ©ν΄ λ€μκ³Ό κ°μ΄ μΈ μ μλ€.
function getFirstElem(arr: string[]): string; function getFirstElem(arr: number[]): number; function getFirstElem(arr) { if (!Array.isArray(arr)) { throw new Error('getFirstElemOrNull: Argument is not array!'); } if (arr.length === 0) { throw new Error('getFirstElemOrNull: Argument is an empty array!'); } return arr[0] ? arr[0] : null; }
νμ§λ§ μ΄ ν¨μκ° μμμ νμ
κ°μ μμλ‘ κ°λ λ°°μ΄μ λν΄ λμνλλ‘ λ§λ€λ €λ©΄ μ΄λ»κ² ν΄μΌ ν κΉ?
μ‘΄μ¬ν μ μλ λͺ¨λ νμ
μ λν΄ μ€λ²λ‘λ©μ μ λ 건 (κ°λ₯ν νμ
μ μκ° λ¬΄ννλ―λ‘) λΆκ°λ₯νλ€.
μΈμμ λ°ν νμ
μ anyλ‘ μ μνλ€λ©΄ λμμ νκ² μ§λ§, νμ
μ 보λ₯Ό λͺ¨λ μκ² λλ―λ‘ μ’μ λ°©λ²μ΄ μλλ€.
μ°λ¦¬κ° μνλ κΈ°λ₯μ λ€μκ³Ό κ°λ€. μ¬λ¬ νμ
μ λν΄ λμνλ ν¨μλ₯Ό μ μνλ, ν΄λΉ ν¨μλ₯Ό μ μν λλ μ μ μκ³ μ¬μ©ν λμλ§ μ μ μλ νμ
μ 보λ₯Ό μ¬μ©νκ³ μΆλ€. μ λλ¦μ λ°λ‘ κ·Έλ¬ν κΈ°λ₯μ μ 곡νλ€.
νμ λ³μ
ν¨μλ₯Ό νΈμΆνλ μμ μ΄ λμ΄μΌλ§ μ μ μλ κ°μ ν¨μ λ΄λΆμμ μ¬μ©νκΈ° μν΄μλ κ·Έ κ°μ λ΄μλ λ§€κ°λ³μκ° νμνλ€.
λ§μ°¬κ°μ§λ‘, μμλ₯Ό μ¬μ©νλ μμ μμλ§ μ μ μλ νμ
μ λ΄μλκΈ° μν΄μλ νμ
λ³μ(type variable)κ° νμνλ€.
νμ
λ³μμ νμ
μ κ΄κ³λ λ§€κ°λ³μμ μΈμ κ°μ κ΄κ³μ λΉμ·νλ€.
νμ
λ³μλ λΆλ±νΈ(<,>)λ‘ λ³μλͺ
μ κ°μΈ μ μνλ€.
μ΄λ κ² μ μν νμ
λ³μλ₯Ό μμμ νμ
μ μ (μλ₯Ό λ€μ΄ ν¨μμ μΈμ λ° λ°ν νμ
)μ μ¬μ©ν μ μλ€.
λΆλ±νΈ κΈ°νΈ μμ μ μλ νμ
λ³μμ μ€μ νμ
μ μ€μ κ°μ΄ λμ΄μ€λ μμ μ κ²°μ λλ€.
컨벀μ
μ νμ
μ€ν¬λ¦½νΈμ νμ
λ³μλ λλ¬Έμλ‘ μμνλ©° PascalCase λͺ
λͺ
λ²μ μ¬μ©νλ€.
μ λλ¦ ν¨μ
νμ
λ³μλ₯Ό μ΄μ©ν΄ μμ getFirstElem ν¨μλ₯Ό λ€μκ³Ό κ°μ΄ μ λλ¦ ν¨μλ‘ μ μν μ μλ€.
function getFirstElem<T>(arr: T[]): T { /* ν¨μ λ³Έλ¬Έ */ }
μμ νμ
μ μλ λ€μκ³Ό κ°μ΄ μ½μ μ μλ€.
μμμ νμ Tμ λν΄, getFirstElemμ T νμ κ°μ λ°°μ΄ arrλ₯Ό μΈμλ‘ λ°μ T νμ κ°μ λ°ννλ ν¨μλ€.
λ³΄λ€ μΌλ°μ μΌλ‘λ λ€μκ³Ό κ°μ κΌ΄μ΄ λλ€. μ΄ λ μΈμ νμ
κ³Ό λ°ν νμ
μ ννν λ νμ
λ³μλ₯Ό μ¬μ©ν μ μλ€.
function ν¨μλͺ <νμ λ³μ>(μΈμ νμ ): λ°ν νμ { /* ν¨μ λ³Έλ¬Έ */ }
ν¨μλ₯Ό νΈμΆ ν λμλ μ μμμ λ§€κ°λ³μκ° μλ μ리μ μΈμλ₯Ό λ£μ΄μ€λ€.
λ§μ°¬κ°μ§λ‘, μ λλ¦ ν¨μλ₯Ό νΈμΆν λμλ μ μμμ νμ
λ³μκ° μλ μ리μ νμ
μΈμλ₯Ό λ£μ΄μ€λ€.
const languages: string[] = ['TypeScript', 'JavaScript']; const language = getFirstElem<string>(languages); // μ΄ λ languageμ νμ μ λ¬Έμμ΄
μ λλ¦ νμ λ³μΉ
νμ
λ³μΉ μ μμλ μ λλ¦μ μ¬μ©ν μ μλ€. μ΄ λ νμ
λ³μ μ μλ λ³μΉ μ΄λ¦ λ€μμ λΆμ¬ μ΄λ€.
type MyArray<T> = T[]; const drinks: MyArray<string> = ['Coffee', 'Milk', 'Beer'];
νμ
λ³μμ μ λλ¦μ ν΅μ¬μ μ¬λ¬ νμ
μ λν΄ λμνλ μμλ₯Ό μ μνλ, ν΄λΉ μμλ₯Ό μ¬μ©ν λκ° λμ΄μΌ μ μ μλ νμ
μ 보λ₯Ό μ μμ μ¬μ©νλ κ²μ΄λ€.
μ΄λ¬ν κ°λ
μ΄ μ μ©λλ λ²μλ ν¨μμ νμ
λ³μΉμ κ΅νλμ§ μλλ€.
μ λλ¦μ μ΄μ©ν΄ μΆν λ€λ£° μΈν°νμ΄μ€, ν΄λμ€ λ± λ€μν νμ
μ ννλ ₯μ λν μ μλ€.
4μ₯μμ μΆν ν΄λΉ μ£Όμ λ₯Ό λ€λ£° λμ μ’ λ μμΈν λ€λ£¬λ€.