β λΆκ³Ό μμ 곡λΆνλ€κ³ νλ₯ν νκ°κ° λμ§ μλ―, μ»΄ν¨ν°κ³Όνμ 곡λΆνλ€κ³ νλ₯ν νλ‘κ·Έλλ¨Έκ° λμ§λ μλλ€. β
- Eric Raymond
μΈλ₯νμ, μ€νμμ€ μ΄λμ λν μμ κ°

νμ μ€ν¬λ¦½νΈ ν¨μ νν
νμ μ€ν¬λ¦½νΈμμ ν¨μλ₯Ό νννλ λ°©λ²μ 머리 μν μ λλ‘ μ¬λ¬κ°μ§μ΄λ€.
λ΄κ° μ°κΈ° νΈν ν¨μ μ μΈ λ°©μμ μ΄μ©νλ©΄ λκ² μ§λ§, λ¨μ΄ λ§λ λΌμ΄λΈλ¬λ¦¬λ μ½λλ₯Ό 보기 μν΄μλ μ΄λ€ νμ μ€ν¬λ¦½νΈ ν¨μ ννμμ΄ μλμ§ μ νμκ° μλ€.
μΌλ°μ μΈ ν¨μ μ μ
μλ°μ€ν¬λ¦½νΈμμ ν¨μλ₯Ό νννλλ° ν¬κ² 3κ°μ§ ννμμ΄ μλ€.
μ¬κΈ°μ κ·Έλ₯ 맀κ°λ³μμ 리ν΄κ°λ§ νμ λ§ μ§μ ν΄μ£Όλ©΄ λλ κ·Έλ κ² λν΄νμ§λ μλ€.
ν¨μ μ μΈμ
//* ν¨μ μ μΈμ
function myFunc1(x: number, y: number): number {
return x + y;
}
ν¨μ ννμ
//* ν¨μ ννμ
let myFunc2 = function (x: number, y: number): number {
return x + y;
};
νμ΄ν ν¨μ
//* νμ΄ν ν¨μ
let myFunc3 = (x: number, y: number): number => {
return x + y;
};
Call Signature (ν¨μ νμ )
μ¬κΈ°μ λΆν° λ¬Έμ μ΄λ€.
λ¬Έμμ΄μ string, μ μλ°°μ΄μ number[] λ‘ νννλ―μ΄ ν¨μ μμ ν¨μλ₯Ό νννλ νμ
μ 미리 μ μΈ κ°λ₯νλ€.
ν¨μ νμ
μ 미리 μ μΈνκ³ λ€μ ν¨μμμ λΆμ¬λ£μΌλ©΄, ν¨μ μκ·λ¨ΌνΈμμ νμ
μ λ μ μΈνμ§ μμλ λλ€λ νΉμ§μ΄ μλ€.
//* λ³μμ 미리 ν¨μ νμ
μ μ§μ
let myFunc4: (arg1: number, arg2: number) => number;
myFunc4 = function (x, y) {
return x + y;
}; // 미리 λ³μμ ν¨μ νμ
μ μ§μ νκΈ°μ λμ
νλ ν¨μμμ νμ
μ μ°μ§μμλ λλ€.
//* μμ κ³Όμ μ νμ€λ‘ νν
let myFunc5: (arg1: number, arg2: number) => number = (x, y) => {
return x + y;
};
μ¬κΈ°μ μ‘°μ¬ν΄μΌ λλκ² νμ΄νκ° μλ€κ³ ν΄μ μμ νμ΄ν ν¨μμ νκΉλ¦¬μ§ λ§μμΌ νλ€λ μ μ΄λ€.
μμμ ν¨μ ννμμμ ν¨μ λ¦¬ν΄ νμ μ μ½λ‘ (:) μΌλ‘ νννλλ° λ°λ‘ ν¨μ νμ μ μ μΈν λλ νμ΄νλ‘ λ¦¬ν΄ νμ μ νννλ λ―Έκ°μ μ£Όλ¦μ΄ μ‘νκ² μ§λ§ μ΅μν΄μ ΈμΌ νλ€...

type λ³μΉ λ° μΈν°νμ΄μ€ μμ κ°λ³μ μΌλ‘ ν¨μνμ μ μ μΈνμ¬ μ¬μ©λ μ μλ€.
μΈν°νμ΄μ€λ ν¨μ νμ μ λ νμ΄νκ° μλ μ½λ‘ (:)μΌλ‘ νννλ λ―ΈμΉκ³ νλ± λΈ λ Έλ¦μ΄λ€.
//* type 리ν°λ΄λ‘ ν¨μ νμ
μ μ§μ
type Add1 = (x: number, y: number) => number;
let myFunc6: Add1 = (x, y) => {
return x + y;
};
//* μΈν°νμ΄μ€λ‘ ν¨μ νμ
μ μ§μ
interface Add2 {
(x: number, y: number): number;
}
let myFunc7: Add2 = (x, y) => {
return x + y;
};
κ°λ μ΄λ€ λΌμ΄λΈλ¬λ¦¬μλ λ€μκ³Ό κ°μ΄ ν΄κ΄΄λ§μΈ‘ν νμ ν¨μ ννμ νκΈ°λ νλ€.
μ΄μ λν΄μ λ€μ ν¨μ μ€λ²λ‘λ© μ±ν°μμ μμΈν λ€λ£¬λ€.
function myFunc8(x: string, y: string): string; // ν¨μ νμ
μ μΈ
function myFunc8(x: number, y: number): number; // ν¨μ νμ
μ μΈ
function myFunc8(x: any, y: any) { // μ€μ ν¨μ μ μΈ
return x + y;
}
myFunc8(1, 2);
νμ μ€ν¬λ¦½νΈ 맀κ°λ³μ νν
νμ μ€ν¬λ¦½νΈμμλ ν¨μμ μΈμλ₯Ό λͺ¨λ νμ κ°μΌλ‘ κ°μ£Όνλ€.
λ°λΌμ, ν¨μμ 맀κ°λ³μλ₯Ό μ€μ νλ©΄ μ¬μ§μ΄ μΈμκ°μ΄ undefinedλ null κ°μ μΈλͺ¨μλ κ°μ΄μ΄λΌλ μΈμλ‘ λ겨μΌνλ©°, μ»΄νμΌλ¬μμλ μ μλ 맀κ°λ³μ κ°μ΄ λμ΄ μλμ§ νμΈνλ€.
function sum(a: number, b: number): number {
return a + b;
}
sum(10, 20); // 30
sum(10, 20, 30); // error, too many parameters
μ νμ 맀κ°λ³μ
λ§μΌ μλ°μ€ν¬λ¦½νΈ μ²λΌ μ μ°νκ² μ μλ 맀κ°λ³μμ κ°―μ λ§νΌ μΈμλ₯Ό λκΈ°μ§ μμλ λκ² λ§λ€κ³ μΆλ€λ©΄, μ νμ (optional) ν€μλμΈ λ¬Όμν(?)λ₯Ό μ΄μ©ν΄μ μλμ κ°μ΄ μ μν μ μλ€.
λ€μ μμ λ₯Ό 보면 ? ν€μλλ₯Ό μ¬μ©ν΄ bλ₯Ό μ νμ λ§€κ° λ³μλ‘ μ§μ νλ€. λ°λΌμ bκ° λ°μ μΈμκ° μμ΄λ μλ¬κ° λ°μνμ§ μλλ€.
function sum(a: number, b?: number): number {
return a + b;
}
sum(10, 20); // 30
sum(10); // νμ
μλ¬ μμ
μ¬μ€ μ μμ λ μ νν λ€μ μμ μ κ°λ€. μ¦, ? ν€μλ μ¬μ©μ μ λμ¨ νμ
| undefined λ₯Ό μΆκ°νλ κ²κ³Ό κ°λ€κ³ λ³Ό μ μλ€.
function sum(a: number, b: number | undefined): number {
return a + b;
}
sum(10, 20); // 30
sum(10); // νμ
μλ¬ μμ
μ’λ μμ©νμλ©΄ λ€μκ³Ό κ°μ΄ ꡬμ±ν μ μλ€.
ν¨μ νΈμΆμμ λ λ²μ§Έ 맀κ°λ³μμ μΈ λ²μ§Έ 맀κ°λ³μμ κ°μ λ§μΌ μ λ¬νμ§ μμΌλ©΄, μ νμ νλ‘νΌν°(?) μ μν΄ μλ¬λ μλμ§λ§, undefinedλ‘ ν λΉλκ² λλ€.
κ·Έλμ Null λ³ν© μ°μ°μ( ?? )λ₯Ό μ¬μ©νμ¬ null λλ undefinedμΈ κ²½μ° 0μ λ°ννλλ‘ μ§μ νλ μμΌλ‘ μ²λ¦¬κ° κ°λ₯νλ€.
function add(a: number, b?: number, c?: number): number {
return a + (b ?? 0) + (c ?? 0);
}
add(1, 2, 3); // 6
add(1, 2); // 3
add(1); // 1
λ¨, μ νμ 맀κ°λ³μλ₯Ό μ¬μ©ν λ μ£Όμν μ μ μ νμ 맀κ°λ³μκ° μ΄μΈμ ν¨μ μΈμ μμΌλ‘ μμΉνλ©΄ μλλ κ²μ΄λ€. (μ νμ 맀κ°λ³μλ 무쑰건 λ€λ‘ μμΉ)
function sum(b?: number, a: number): number {
return a + (b ?? 0);
}

λ§μΌ μ΅μ λ 맀κ°λ³μλ₯Ό μμλ€ κΌ λκ³ μ¬μ©νκ³ μΆλ€λ©΄, κ°μ νμ λμμΈ μ λμ¨ νμ ( number | undefined )μΌλ‘ μ μΈνλ©΄ λλ€. λ€λ§ μ¬μ©μ±μ΄λ κ°λ μ±μ΄ 그리 μ’μ§λ μμ μ΄λ¬ν κΈ°λ²μ μ§μνλ νΈμ΄λ€.
function sum(b: number | undefined, a: number): number {
return a + (b ?? 0);
}
sum(20, 11); // 31
sum(undefined, 11); // 11
맀κ°λ³μ μ΄κΈ°ν
맀κ°λ³μ μ΄κΈ°νλ μλ°μ€ν¬λ¦½νΈ ES6 λ¬Έλ²κ³Ό λμΌνλ€.
κΈ°λ³Έκ°μ ν λΉν 맀κ°λ³μμ ν¨μ νμ μ 보면 μ΅μ λ νλΌλ―Έν°(μ νμ 맀κ°λ³μ)κ° μ μ©λ κ±Έ νμΈ ν μ μλ€.
μλνλ©΄ 맀κ°λ³μμ κΈ°λ³Έ κ°μ΄ μμΌλ©΄ 맀κ°λ³μμ κ°μ ν λΉ νμ§ μμλ λλ€λ μλ―Έκ° λκΈ° λλ¬Έμ΄λ€.
λλΆμ΄ κΈ°λ³Έ κ°μ΄ μμΌλ©΄ κ΅³μ΄ μΈμ νμ μ μ μΈνμ§ μμλ λλ€. νμ μ€ν¬λ¦½νΈμμ μ΄λ₯Ό νμ μΆλ‘ μ΄λΌ μΉνλ€.
function sum(a: number, b = 100): number { // 맀κ°λ³μ κΈ°λ³Έ κ°μ΄ μμΌλ©΄ κ΅³μ΄ μΈμ νμ
μ μ μΈνμ§ μμλ λλ€ (νμ
μΆλ‘ )
return a + b;
}
sum(10, undefined); // 110
sum(10); // 110
sum(10, 10) // 20

λλ¨Έμ§(rest) 맀κ°λ³μ
ES6μμ μ¬μ©λλ μ€νλ λ 맀κ°λ³μ μμ μ§μ νμ λ§ μ μ§μ νλ©΄ νμ μ€ν¬λ¦½νΈμμλ λ¬Έμ μμ΄ μ¬μ©κ°λ₯νλ€.
function sum(a: number, ...nums: number[]): number {
const totalOfNums = 0;
for (let key in nums) {
totalOfNums += nums[key];
}
return a + totalOfNums;
}
λ€λ§, νμ μ€ν¬λ¦½νΈμμ strict λͺ¨λλ₯Ό trueλ‘ νκ³ μ¬μ©νκΈ° λλ¬Έμ, μλ°μ€ν¬λ¦½νΈμ arguments μμ½μ΄λ μ¬μ©λ μ μλ€λ μ μ μ μν΄μΌ νλ€.

λ€μλ νλΌλ―Έν°
named parametersλ ν¨μ μκ·λ¨ΌνΈ λΆλΆ μ 체λ₯Ό κ°μ²΄λ‘ κ°μΈμ£Όκ³ , κ·Έ λ€μ νμ μ μ μλ₯Ό ν΄μ£Όλ λ°©μμ΄λ€.
λ§μΉ μλ°μ€ν¬λ¦½νΈμ ꡬ쑰λΆν΄ λ¬Έλ²μ νμ μΌλ‘ ꡬνν κ²μ΄λΌκ³ ν μ μλ€.
function getText({ name, age = 15, language }: { name: string; age?: number; language?: string }): string {
const nameText = name.substr(0, 10);
const ageText = age >= 35 ? 'senior' : 'junior';
return `name: ${nameText}, age: ${ageText}, language: ${language}`;
}
getText({ name: 'νκΈΈλ', age: 11, language: 'kor' });
getText({ name: 'νκΈΈλ' });
μ°λ¦¬ λ μλΆλ€μ μμ μ½λλ₯Ό 보며 'λ³ ν΄κ΄΄ν λ¬Έλ²μ΄ λ€μμ΄' π€’ λΌλ©° μμ¬λλ₯Ό μΉμκ² μ§λ§, λ€μλ νλΌλ―Έν°λ ν¨μμ μκ·λ¨ΌνΈ κ°―μκ° λ§μλ μ μ©ν μ¬μ©λ μ μλ€.
μλνλ©΄ μκ·λ¨ΌνΈμ νμ μ 보λ₯Ό λ€μλ€ λ΄λΊμΌλ‘μ¨, νλμ ν¨μ μκ·λ¨ΌνΈ ꡬμ±μ λ³Όμ μκΈ° λλ¬Έμ΄λ€.
λ³ν λ°©λ²λ μλν° λ΄μμ μλμΌλ‘ 리ν©ν λ§μ μ 곡νκΈ° λλ¬Έμ μ΄λ ΅μ§ μλ€.



λ€λ§ κ·Έλλ μ΄λ¬ν ν¨μ ννλ°©μμ΄ λμ ν μ΅μνμ§ μλλ€λ©΄ κ΅³μ΄ λ€μλ νλΌλ―Έν°λ₯Ό μ΄μ©ν νμλ μλ€.
νμ μ€ν¬λ¦½νΈ μ½λ°± / μ€μ²© / κ³ μ°¨ ν¨μ
μ½λ°± ν¨μ
μ½λ°± μΈμμ νμ μ, μμμ λ°°μ΄ call signiture(ν¨μ νμ )μΌλ‘ μ μνλ©΄ λλ€.
const logging = function (s: string) {
console.log(s);
};
const init = (callback: (arg: string) => void) => {
console.log('callback start');
callback('yes!');
console.log('callback end');
};
init(logging);
/*
callback start
yes!
callback end
*/

μ€μ²© ν¨μ
ν° μ μ½μμ΄ μμ ν¨μ νμ μ μΈλ§ μ ν΄λμΌλ©΄ κ°λ¨ν μ€μ²©ν΄μ μ¬μ©μ΄ κ°λ₯νλ€.
const calc = (value: number, cb: (arg: number) => void) => {
const add = (a: number, b: number) => a + b; // νμ΄ν ν¨μ
function mul(a: number, b: number) { // ν¨μ ννμ
return a * b;
}
let result = mul(add(3, 4), value);
cb(result);
};
calc(2, (output) => console.log(output)); // 14
κ³ μ°¨ ν¨μ
κ³ μ°¨ ν¨μ(high order function)λ ν¨μλ₯Ό λ°ννλ ν¨μλ₯Ό λ§νλ€.
const add = (a: number) => {
return (b: number) => {
return a + b;
};
};
// 곧λ°λ‘ μ€ν
console.log(add(3)(8)); // 11
// ν λ² κ±Έμ³€λ€κ° μ€ν
const first = add(3);
console.log(first(8)); // 11
νμ μ€ν¬λ¦½νΈ this νν
μλ°μ€ν¬λ¦½νΈμμλ κ·Έλ¬λ―μ΄, ν¨μλ₯Ό λ€λ£¨λλ° μμ΄ κ°μ₯ μ€μν λ΄μ© μ€ νλκ° λ°λ‘ this ν€μλ μ΄λ€.
μλ°μ€ν¬λ¦½νΈ ν¨μ λ΄ thisλ μ μ κ°μ²΄λ₯Ό μ°Έμ‘°νκ±°λ, undefinedκ° λλ λ± μ°λ¦¬κ° μνλ μ½ν μ€νΈ(context)λ₯Ό μκ³ λ€λ₯Έ κ°μ΄ λλ κ²½μ°λ€μ΄ μλ κ²½μ°κ° λΉμΌλΉμ¬ νκΈ° λλ¬Έμ΄λ€.
νμ μ€ν¬λ¦½νΈμ this νμ ννμ νμ΅νκΈ°μ μμ, μλ°μ€ν¬λ¦½νΈμ thisλ₯Ό νλ² λ 볡μ΅νκ³ μ€λκ±Έ μΆμ²νλ€.
[JS] π μλ°μ€ν¬λ¦½νΈ this π― μμ μ 볡
this μ μ let group = { title: "1λͺ¨λ ", students: ["보λΌ", "νΈμ§", "μ§λ―Ό"], title2 : this.title, title3() { console.log(this.title) } }; console.log(group.title2); //undefined group.title3(); // 1..
inpa.tistory.com
λͺ μμ this
λ€μκ³Ό κ°μ΄ someFn λ©μλλ μ μ λ μ컬 μ€μ½νμ μμΉνκΈ°μ thisμ anyμ€λ₯κ° λνλκ² λλ€.
interface Cat {
name: string;
}
const cat: Cat = {
name: 'Lucy',
};
function someFn(greeting: string) {
console.log(`${greeting} ${this.name}`); // Error - 'this'μλ νμ μ£Όμμ΄ μμΌλ―λ‘ μμμ μΌλ‘ 'any' νμμ΄ ν¬ν¨λ©λλ€.
}
someFn.call(cat, 'Hello'); // μμ μλ¬κ° λμ μ€νμ΄ μλ¨
μ΄ κ²½μ° thisμ νμ μ λͺ μμ μΌλ‘(explicitly) μ μΈν μ μλ€.
someFn μ΄λΌλ λ©μλμ thisμ νμ
μ λͺ
μμ μΌλ‘ ICat μΈν°νμ΄μ€λ₯Ό κ°λ¦¬ν€κ² ν¨μΌλ‘μ νμ
μ λͺ
μν΄ μ€λ₯λ₯Ό μμ€λ€.
λ€μκ³Ό κ°μ΄ 첫 λ²μ§Έ κ°μ§(fake) 맀κ°λ³μλ‘ thisλ₯Ό μ μΈνλ©΄ λλ€.
interface ICat {
name: string
}
const cat: ICat = {
name: 'Lucy'
};
function someFn(this: ICat, greeting: string) {
console.log(`${greeting} ${this.name}`); // ok
}
someFn.call(cat, 'Hello'); // Hello Lucy
νμ μ€ν¬λ¦½νΈ ν¨μ μ€λ²λ‘λ©
μ€λ²λ‘λ©μ΄λ 맀κ°λ³μκ° λ€λ₯Έ λμΌν ν¨μλ₯Ό λ§νλ κ²μ΄λ€. μλ°λ C#μ νμλ€ μ¨ λΆλ€μ΄λΌλ©΄ μ΅μν λ¨μ΄μΌ κ²μ΄λ€.
νμ
μ€ν¬λ¦½νΈμ ν¨μ μ€λ²λ‘λ(Overloads) μμ μ΄λ¦μ κ°μ§λ§, μ νν λ§νμλ©΄ 맀κ°λ³μ νμ
κ³Ό λ°ν νμ
μ΄ λ€λ₯Έ μ¬λ¬ ν¨μλ₯Ό κ°μ§ μ μλ κ²μ λ§νλ€.
ν¨μ μ€λ²λ‘λλ₯Ό ν΅ν΄ λ€μν ꡬ쑰μ ν¨μλ₯Ό μμ±νκ³ κ΄λ¦¬ν μ μμ΄ μ μ©νκ² μ°μΈλ€.
ν¨μ μ€λ²λ‘λ μ μΈλ²μ μ½κ° λ νΉνλ° μ€κ΄νΈ {} μλ ν¨μλ₯Ό μ€μ ν¨μ μμλ€κ° μ¨μ£Όλ©΄ λλ€.
function add(a: string, b: string): string; // μ€λ²λ‘λ ν¨μ μ μΈ
function add(a: number, b: number): number; // μ€λ²λ‘λ ν¨μ μ μΈ
function add(a: any, b: any): any { // μ€λ²λ‘λ ν¨μ μ€νλΆ (anyλ₯Ό μ¨μ€λ€)
return a + b;
}
add('hello ', 'world~');
add(1, 2);

Q. νμ μ€ν¬λ¦½νΈμμ anyλ₯Ό μ°μ§λ§λΌ νλλ° μ€λ²λ‘λ ν¨μμλ μ¨λ λ¬Έμ μμκΉ?
κ²°λ‘ λΆν° λ§νμλ©΄ μ ν λ¬Έμ κ° μλ€.
μ€λ²λ‘λ ν¨μ μ€νλΆ μμμ μΈμμ λ¦¬ν΄ νμ μ anyλ₯Ό μ μ΄μ£Όμλλ°, μ¬μ€ μ»΄νμΌλ¬λ μ€λ²λ‘λ ν¨μ μ μΈλΆμ νμ λ€λ§ λ³΄κ³ ν¨μλ₯Ό νλ¨νκΈ°μ μ€νλΆμ anyλ₯Ό μΌλ€κ³ ν΄μ λ¬Έμ κ° λμ§ μλλ€.
μ€μ λ‘add([1, 2], 3)μ κ°μ΄ μ€λ²λ‘λ ν¨μμ a μΈμ νμ μ μ μλμ§μμ λ°μ΄ν°λ₯Ό λ£μ κ²½μ° μ»΄νμΌλ¬ μλ¬κ° λνλκ² λλ€. (μ΄λ any νμ μ΄ μλνμ§ μλλ€λ λ§μ΄λ€)
λ°λΌμ 'μ€λ²λ‘λ ν¨μμμμ any ννμ νμ μ€ν¬λ¦½νΈμμ νμ©λλ€'λΌκ³ μ΄ν΄νλ©΄ λλ€.
λ€μκ³Ό κ°μ ν¨μκ° μλ€κ³ κ°μ νμ.
ageμ κ°μ΄ numberλ string μ΄λμ λ°λΌ 쑰건 λΆκΈ°κ° κ°λ¦°λ€. κ·Έλ¦¬κ³ return κ°μ΄ κ°μ²΄μ λ¬Έμμ΄ λκ°μ΄κΈ° λλ¬Έμ ν¨μ λ¦¬ν΄ νμ μμ μ λμ¨μΌλ‘ μ§μ νλ€.
interface User {
name: string;
age: number;
}
function join(name: string, age: number | string): User | string {
if (typeof age === 'number') {
return { name, age };
} else {
return 'λμ΄λ μ«μλ‘ μ
λ ₯ν΄ μ£ΌμΈμ';
}
}
μ΄ μ½λλ μ΄λ»λ³΄κΈ°μλ νμ λ μ λͺ μλμ΄ μκ³ λΌμΈ μλ¬λ μλ μ μ³μ μ½λμΈμ€ μκ² μ§λ§ μ€μ λ‘ ν¨μλ₯Ό μ€νμμΌλ³΄λ©΄ μλ¬κ° λ°μνκ² λλ€.

μ»΄νμΌλ¬κ° μ΄λ κ² κ²½κ³ λ₯Ό μ£Όλ μ΄μ λ, μ»΄νμΌλ¬ μ μ₯μμ join ν¨μκ° Userλ₯Ό λ°νν μ§ stringμ λ°νν μ§ νμ μ΄ μκΈ° λλ¬Έμ΄λ€.
μ½λ μμμλ λΆλͺ if λ¬ΈμΌλ‘ λΆκΈ°μ²λ¦¬κ° μ λμ΄μμ§λ§, νμ λ§ λκ³ λ΄€μλλ νμ μ΄ μκΈ° λλ¬Έμ μ»΄νμΌλ¬κ° μλ¬λ₯Ό μ£Όλ κ²μ΄λ€.
μ΄λ΄λ λ°λ‘ ν¨μ μ€λ²λ‘λ©μ ν΅ν΄ ν΄κ²°ν μ μλ€.
interface User {
name: string;
age: number;
}
function join(name: string, age: number): User;
function join(name: string, age: string): string;
function join(name: any, age: any): any {
if (typeof age === 'number') {
return { name, age };
} else {
return 'λμ΄λ μ«μλ‘ μ
λ ₯ν΄ μ£ΌμΈμ';
}
}
const sma: User = join('Sam', 30);
const jame: string = join('Jane', '30');
const jame2: string = join(123, '30'); // ERROR !!!
λ§μΌ μ€λ²λ‘λ© ν¨μλ€μ 맀κ°λ³μμ νμ μ΄ λ€μκ³Ό κ°μ΄ λ€μν κ²½μ°, μ νμ νλ‘νΌν°(?) λ₯Ό μ¬μ©ν΄ μ μΈμ΄ κ°λ₯νλ€.
// ν¨μ μ μΈ
function printConsole(a: number): void;
function printConsole(a: string): void;
function printConsole(a: number, b: string): void;
function printConsole(a: string, b: number): void;
// ν¨μ ꡬν
function printConsole(a: any, b?: any): void {
console.log(a, b);
}
// ν¨μ νΈμΆ
printConsole('1');
printConsole('1', 2);
// Error - μ€λ²λ‘λ©μ (a: string, b: string) => void λΌλ ν¨μ νμ
μ΄ μκΈ° λλ¬Έμ΄λ€.
printConsole('1', '2');
λ§μ½ ν¨μμ μΈμ μ«μκ° κ°κ³ , λ°ν νμ μ΄ κ°λ€λ©΄ κ΅³μ΄ overloadλ₯Ό μ¬μ©ν νμ μλ€.
μ€νλ € κ°λ¨νκ² Union TypeμΌλ‘ ν΄μ£Όλκ² ν¨μ¬ 보기 μ’λ€.
// κ΅³μ΄ μ€λ²λ‘λ©??
function overloadLen(s: string): number;
function overloadLen(arr: any[]): number;
function overloadLen(x: any) {
return x.length;
}
// κΉμνκ² μ λμ¨μΌλ‘ ꡬν
function simpleLen(x: any[] | string): number {
return x.length;
}
# μ°Έκ³ μλ£
https://typescript-kr.github.io/pages/functions.html
https://heropy.blog/2020/01/27/typescript/
μ΄μ¬μΉ νμ μ€ν¬λ¦½νΈ μμνκΈ°
μ λ‘μ΄ νμ μ€ν¬λ¦½νΈ μ¬μΈμ
μ½κ² μμνλ νμ μ€ν¬λ¦½νΈ (κΈΈλ², 2023, μΊ‘ν΄νκ΅ μ§μ)
μ΄ κΈμ΄ μ’μΌμ ¨λ€λ©΄ ꡬλ & μ’μμ
μ¬λ¬λΆμ ꡬλ
κ³Ό μ’μμλ
μ μμκ² ν° νμ΄ λ©λλ€.