π€ Chapter 4: ν¨μμ λ©μλ
π¦ ν¨μ μ μΈλ¬Έβ
- μλ°μ€ν¬λ¦½νΈμμ ν¨μλ
function
ν€μλλ‘ λ§λλ ν¨μμ=>
κΈ°νΈλ‘ λ§λλ νμ΄ν ν¨μ λ κ°μ§ μλ€. - νμ μ€ν¬λ¦½νΈ ν¨μ μ μΈλ¬Έμ μλ°μ€ν¬λ¦½νΈ ν¨μ μ μΈλ¬Έμμ 맀κ°λ³μμ ν¨μ λ°νκ°μ νμ μ£Όμμ λΆμ΄λ λ€μ ννλ‘ κ΅¬μ±λλ€.
function add(a: number, b: number): number {
return a + b;
}
let result = add(1, 2);
π 맀κ°λ³μμ λ°νκ°μ νμ μ£Όμ μλ΅β
- ν¨μ μ μΈλ¬Έμμλ 맀κ°λ³μμ λ°νκ°μ λν νμ μ£Όμμ μλ΅ν μ μλ€.
- λ€λ§, λ³μ λμλ λ¬λ¦¬ ν¨μμ 맀κ°λ³μ νμ κ³Ό λ°ν νμ μ μλ΅νλ κ²μ λ°λμ§νμ§ μλ€. μλνλ©΄, νμ μ΄ μλ΅λμ΄ μμΌλ©΄ ν¨μμ ꡬν μλλ₯Ό μκΈ° μ΄λ ΅κ³ μλͺ» μ¬μ©νκΈ° μ½κΈ° λλ¬Έμ΄λ€.
π void νμ β
- κ°μ λ°ννμ§ μλ ν¨μλ λ°ν νμ
μ΄
void
μ΄λ€. void
νμ μ ν¨μ λ°ν νμ μΌλ‘λ§ μ¬μ©ν μ μλ€.
function printMe(name: string, age: number): void {
console.log(`name: ${name}, age: ${age}`);
}
π ν¨μ μκ·Έλμ²β
- λ³μμ νμ μ΄ μλ―μ΄ ν¨μ λν νμ μ΄ μλλ°, ν¨μμ νμ μ ν¨μ μκ·Έλμ²λΌκ³ νλ€.
(맀κ°λ³μ1νμ
, 맀κ°λ³μ2νμ
[, ...]) => λ°νκ° νμ
- λ€μ
printMe
ν¨μλstring
κ³Όnumber
νμ μ 맀κ°λ³μκ° λ κ° μκ³ λ°ν νμ μ΄void
μ΄λ€. - λ°λΌμ ν¨μ μκ·Έλμ²λ
(string, number) => void
μ΄λ€.
let printMe: (string, number) => void = function (name: string, age: number): void {}
- λ§μ½ 맀κ°λ³μκ° μμΌλ©΄ λ¨μν
()
λ‘ νννλ€.() => void
λ 맀κ°λ³μλ μκ³ λ°νκ°λ μλ ν¨μ μκ·Έλμ²μ΄λ€.
π type ν€μλλ‘ νμ λ³μΉ λ§λ€κΈ°β
- νμ
μ€ν¬λ¦½νΈλ
type
μ΄λΌλ ν€μλλ₯Ό μ 곡νλ€. type
ν€μλλ κΈ°μ‘΄μ μ‘΄μ¬νλ νμ μ λ¨μν μ΄λ¦λ§ λ°κΏμ μ¬μ©ν μ μκ² ν΄μ€λ€.- μ΄λ¬ν κΈ°λ₯μ νμ λ³μΉ(type alias)μ΄λΌκ³ νλ€.
type μλ‘μ΄νμ
= κΈ°μ‘΄νμ
(string, number) => void
ν¨μ μκ·Έλμ²λ₯ΌstringNumberFunc
μ΄λΌλ μ΄λ¦μΌλ‘ νμ λ³μΉμ λ§λ λ€.- μ΄ λ³μΉ λλΆμ λ³μ
f
μg
μ νμ μ£Όμμ λ μμνκ² λΆμΌ μ μλ€.
type stringNumberFunc = (string, number) => void;
let f: stringNumberFunc = function(a: string, b: number): void {}
let g: stringNumberFunc = function(c: string, d: number): void {}
- ν¨μμ νμ , μ¦ ν¨μ μκ·Έλμ²λ₯Ό λͺ μνλ©΄ 맀κ°λ³μμ κ°μλ νμ , λ°ν νμ μ΄ λ€λ₯Έ ν¨μλ₯Ό μ μΈνλ μλͺ»μ λ―Έμ°μ λ°©μ§ν μ μλ€.
// μλ΅...
let h: stringNumberFunc = function () {}
h(); // 2κ°μ μΈμκ° νμνλ° 0κ°λ₯Ό κ°μ Έμμ΅λλ€.
π undefined κ΄λ ¨ μ£Όμ μ¬νβ
undefined
νμ μ νμ μ€ν¬λ¦½νΈμ νμ κ³μΈ΅λμμ λͺ¨λ νμ μ€ μ΅νμ νμ μ΄λ€.- λ€μμ
undefined
λ₯Ό κ³ λ €νμ§ μμ μμ΄λ€.
interface INameable {
name: string;
}
function getName(o: INameable) { return o.name; }
let n = getName(undefined); // μ€λ₯ λ°μ
console.log(n);
getName
μINameable
νμ μ 맀κ°λ³μλ₯Ό μꡬνμ§λ§,undefined
νΈμΆν΄λ ꡬ문 μ€λ₯κ° λ°μνμ§ μλλ€.- μ¦,
undefined
λ μ΅νμ νμ μ΄λ―λ‘INameable
μ μμνλ μμ νμ μΌλ‘ κ°μ£Όνλ€. - νμ§λ§, μ½λλ₯Ό μ€ννλ©΄ μ€λ₯κ° λ°μνλ€.
- λ€μμ
undefined
λ₯Ό κ³ λ €ν μμ΄λ€.
interface INameable {
name: string;
}
function getName(o: INameable) {
return o != undefined ? o.name : 'unknown name';
}
let n = getName(undefined);
console.log(n); // unknown name
console.log(getName({ name: 'Jack' })); // Jack
- λ§μ½ μΈν°νμ΄μ€μ μ ν μμ±μ΄ μλ€λ©΄ λ€μκ³Ό κ°μ΄ ꡬνν΄μΌ νλ€.
interface IAgeable {
age?: number;
}
function getAge(o: IAgeable) {
return o != undefined && o.age ? o.age : 0;
}
console.log(getAge(undefined)); // 0
console.log(getAge(null)); // 0
console.log(getAge({ age: 32 })); // 32