https://csn-ah22.github.io/todolist/
skills
- Library: React
- Language: TypeScript, Dart-Sass
- TypeScript Version: 4.7.4
- Sass Version: 1.53.0
κΈ°λ₯μ€λͺ
- μ€λμ λ μ§, μμΌ, μ μ΄ μμλλ‘ νμλ¨
- ν μΌ μΆκ° λ° μμ κΈ°λ₯
- λ§κ° λ μ§ μΆκ° κΈ°λ₯
- 리μ‘νΈμ μ»΄ν¬λνΈλ₯Ό λ§λ€λ μμ£Ό νμ©λλ νΉμ§μ΄λ€
- νΉν, νκ°μ§ νμ λ³΄λ€ μ¬λ¬ κ°μ§ νμ μμ λμνλ μ»΄ν¬λνΈλ₯Ό μμ±νλλ° μ¬μ©λλ€
- μ λ€λ¦μ΄λ νμ μ λ§μΉ ν¨μμ νλΌλ―Έν°μ²λΌ μ¬μ©νλ κ²μ μλ―Ένλ€
function getText<T>(text: T): T {
return text;
}λ¨Όμ ν¨μμ μ΄λ¦ λ°λ‘ λ€μ <T> λΌλ μ½λλ₯Ό μΆκ°νμ΅λλ€.
κ·Έλ¦¬κ³ ν¨μμ μΈμμ λ°ν κ°μ λͺ¨λ T λΌλ νμ
μ μΆκ°ν©λλ€.
μ΄λ κ² λλ©΄ ν¨μλ₯Ό νΈμΆν λ λκΈ΄ νμ
μ λν΄ νμ
μ€ν¬λ¦½νΈκ° μΆμ ν μ μκ² λ©λλ€.
λ°λΌμ, ν¨μμ μ
λ ₯ κ°μ λν νμ
κ³Ό μΆλ ₯ κ°μ λν νμ
μ΄ λμΌνμ§ κ²μ¦ν μ μκ² λ©λλ€.
- μ ν¨μλ μ λ€λ¦ κΈ°λ³Έ λ¬Έλ²μ΄ μ μ©λ ννμ΄λ€
getText<string>('hi')λ₯Ό νΈμΆ νμ λ ν¨μμμ μ λ€λ¦μ΄ μ΄λ»κ² λμνλμ§ μ΄ν΄λ³΄μ- λ¨Όμ ν¨μμμ μ λ€λ¦ νμ μ΄ μΌλ‘ λλ€
function getText<string>(text: T): T {
return text;
} - κ·Έλ¦¬κ³ λμ ν¨μμ μΈμλ‘
hiλΌλ κ°μ μλμ κ°μ΄ λκΈ°κ² λλ©΄
function getText<string>(text: string): string {
return text;
} - μμ κ°μ μ½λκ° μ²μμ κΈ°λ³Έμ λ€λ¦ μ½λμ κ°μ μλ―Έλ₯Ό κ°μ§κ² λλ€
function logText(text: any): any {
return text;
} -
μμ μ½λλ ν¨μμ μΈμλ‘ μ΄λ€ νμ μ΄ λ€μ΄κ°κ³ μ΄λ€ κ°μ΄ λ°νλλμ§λ μ μκ° μλ€
-
μλνλ©΄ anyλΌλ νμ μ νμ κ²μ¬λ₯Ό νμ§ μκΈ° λλ¬Έ
-
μ΄λ¬ν λ¬Έμ μ μ ν΄κ²°ν μ μλ κ²μ΄ μ λ€λ¦μ΄λ€
function logText<T>(text: T): T {
return text;
} - λκ°μ§ λ°©λ²μΌλ‘ νΈμΆν μ μλ€
// #1
const text = logText<string>("Hello Generic");
// #2
const text = logText("Hello Generic");function logText<T>(text: T): T {
console.log(text.length); // Error: T doesn't have .length
return text;
} - μ μ½λκ° μ€λ₯λ₯Ό λ°μμν€λ μ΄μ λ textμ .lengthκ° μλ€λ λ¨μλ μ΄λμλ μκΈ° λλ¬Έμ΄λ€
- κ·Έλμ μ΄λ° κ²½μ°μλ μλμ κ°μ΄ μ λ€λ¦μ νμ μ μ€ μκ° μλ€
function logText<T>(text: T[]): T[] {
console.log(text.length); // μ λ€λ¦ νμ
μ΄ λ°°μ΄μ΄κΈ° λλ¬Έμ `length`λ₯Ό νμ©ν©λλ€.
return text;
} νΉμ λ λͺ μμ μΌλ‘ μλμ κ°μ΄ μ¬μ©ν μ μλ€
function logText<T>(text: Array<T>): Array<T> {
console.log(text.length);
return text;
} ν¨μμ [1,2,3]μ²λΌ μ«μλ‘ μ΄λ€μ§ λ°°μ΄μ λ°μΌλ©΄ λ°ν κ°μΌλ‘ numberλ₯Ό λλ €μ£Όλ κ²μ΄μ£ .
μ΄λ° λ°©μμΌλ‘ μ λ€λ¦μ μ¬μ©νλ©΄ κ½€ μ μ°ν λ°©μμΌλ‘ ν¨μμ νμ
μ μ μν΄μ€ μ μμ΅λλ€.
- μ λ€λ¦ μΈν°νμ΄μ€μ λν΄ μμ보μ μλμ λ μ½λλ κ°μ μλ―Έμ΄λ€
function logText<T>(text: T): T {
return text;
}
// #1
let str: <T>(text: T) => T = logText;
// #2
let str: {<T>(text: T): T} = logText; - μμ κ°μ λ³ν λ°©μμΌλ‘ μ λ€λ¦ μΈν°νμ΄μ€ μ½λλ₯Ό λ€μκ³Ό κ°μ΄ μμ±ν μ μμ΅λλ€.
interface GenericLogTextFn {
<T>(text: T): T;
}
function logText<T>(text: T): T {
return text;
}
let myString: GenericLogTextFn = logText; // Okay λλ
interface GenericLogTextFn<T> {
(text: T): T;
}
function logText<T>(text: T): T {
return text;
}
let myString: GenericLogTextFn<string> = logText; class GenericMath<T> {
pi: T;
sum: (x: T, y: T) => T;
}
let math = new GenericMath<number>();μ λ€λ¦ ν΄λμ€λ₯Ό μ μΈν λ ν΄λμ€ μ΄λ¦ μ€λ₯Έμͺ½μ <T>λ₯Ό λΆμ¬μ€λλ€.
κ·Έλ¦¬κ³ ν΄λΉ ν΄λμ€λ‘ μΈμ€ν΄μ€λ₯Ό μμ±ν λ
νμ
μ μ΄λ€ κ°μ΄ λ€μ΄κ° μ§ μ§μ νλ©΄ λ©λλ€.
μ‘°κΈ μ μ μ΄ν΄λ³Έ μΈν°νμ΄μ€μ²λΌ
μ λ€λ¦ ν΄λμ€λ ν΄λμ€ μμ μ μλ μμ±λ€μ΄
μ ν΄μ§ νμ
μΌλ‘ μ λμνκ² λ³΄μ₯ν μ μμ΅λλ€.
μ μ μ΄μ μ½λλ₯Ό μ΄ν΄λ³΄μ
function logText<T>(text: T): T {
console.log(text.length); // Error: T doesn't have .length
return text;
} μΈμμ νμ
μ μ μΈν Tλ μμ§ μ΄λ€ νμ
μΈμ§ ꡬ체μ μΌλ‘ μ μνμ§ μμκΈ° λλ¬Έμ length μ½λμμ μ€λ₯κ° λ©λλ€.
μ΄λ΄ λ λ§μ½ ν΄λΉ νμ
μ μ μνμ§ μκ³ λ length μμ± μ λλ νμ©νλ €λ©΄ μλμ κ°μ΄ μμ±ν©λλ€.
interface LengthWise {
length: number;
}
function logText<T extends LengthWise>(text: T): T {
console.log(text.length);
return text;
}- μμ κ°μ΄ μμ±νκ² λλ©΄ νμ μ λν κ°μ λ μλμ§λ§ lengthμ λν΄ λμνλ μΈμλ§ λ겨λ°μ μ μκ² λλ€
logText(10); // Error, μ«μ νμ
μλ `length`κ° μ‘΄μ¬νμ§ μμΌλ―λ‘ μ€λ₯ λ°μ
logText({ length: 0, value: 'hi' }); // `text.length` μ½λλ κ°μ²΄μ μμ± μ κ·Όκ³Ό κ°μ΄ λμνλ―λ‘ μ€λ₯ μμ function getProperty<T, O extends keyof T>(obj: T, key: O) {
return obj[key];
}
let obj = { a: 1, b: 2, c: 3 };
getProperty(obj, "a"); // okay
getProperty(obj, "z"); // error: "z"λ "a", "b", "c" μμ±μ ν΄λΉνμ§ μμ΅λλ€. μ λ€λ¦μ μ μΈν λ λΆλΆμμ< 첫 λ²μ§Έ μΈμλ‘ λ°λ κ°μ²΄μ μλ μμ±λ€μ μ κ·Όν μ μκ²λ μ ννμλ€
-
μλ κ°λ¨ν μ½λλ₯Ό μ μνλ€
-
κ΅¬μ± λͺ©λ‘μ λ€μκ³Ό κ°λ€
-
Class
- field (λ³μ μ΄κΈ°ν)
- get
- set
class Developer {
private name: string;
get name(): string {
return this.name;
}
set name(newValue: string) {
if (newValue && newValue.length > 5) {
throw new Error('μ΄λ¦μ΄ λ무 κΉλλ€');
}
this.name = newValue;
}
}
const josh = new Developer();
josh.name = 'Josh Bolton'; // Error
josh.name = 'Josh';- μΆμ ν΄λμ€(Abstract Class)λ μΈν°νμ΄μ€μ λΉμ·ν μν μ νλ©΄μλ μ‘°κΈ λ€λ₯Έ νΉμ§μ κ°λλ€
- μΆμ ν΄λμ€λ νΉμ ν΄λμ€μ μμ λμμ΄ λλ ν΄λμ€μ΄λ©° μ’ λ μμ λ 벨μμ μμ±, λ©μλμ λͺ¨μμ μ μνλ€
abstract class Developer {
abstract coding(): void; // 'abstract'κ° λΆμΌλ©΄ μμ λ°μ ν΄λμ€μμ 무쑰건 ꡬνν΄μΌ ν¨
drink(): void {
console.log('drink sth');
}
}
class FrontEndDeveloper extends Developer {
coding(): void {
// Developer ν΄λμ€λ₯Ό μμ λ°μ ν΄λμ€μμ 무쑰건 μ μν΄μΌ νλ λ©μλ
console.log('develop web');
}
design(): void {
console.log('design web');
}
}
const dev = new Developer(); // error: cannot create an instance of an abstract class
const josh = new FrontEndDeveloper();
josh.coding(); // develop web
josh.drink(); // drink sth
josh.design(); // design web- μ λμ¨ νμ (Union Type)μ΄λ μλ°μ€ν¬λ¦½νΈμ OR μ°μ°μ(||)μ κ°μ΄ Aμ΄κ±°λ Bμ΄λ€ λΌλ μλ―Έμ νμ μ΄λ€.
- ν¨μμ νλΌλ―Έν° textμλ λ¬Έμμ΄ νμ μ΄λ μ«μ νμ μ΄ λͺ¨λ μ¬ μ μλλ‘ λ§λ€μ μλ€
function logText(text: string | number) {
// ...
}- μλμ κ²½μ°λ anyλ₯Ό μ¬μ©ν κ²½μ° toFixe() κΈ°λ₯μ μ¬μ©νμ§ λͺ»νλ€ (μμμ μλ¦Ώμμ λ°λΌ μλ₯΄λ κΈ°λ₯)
// anyλ₯Ό μ¬μ©νλ κ²½μ°
function getAge(age: any) {
age.toFixed(); // μλ¬ λ°μ, ageμ νμ
μ΄ anyλ‘ μΆλ‘ λκΈ° λλ¬Έμ μ«μ κ΄λ ¨λ APIλ₯Ό μμ±ν λ μ½λκ° μλ μμ±λμ§ μλλ€.
return age;
}- μ λμ¨ νμ μ μ¬μ©νμ¬ ifλ¬Έμ λ°λΌ toFixe()κΈ°λ₯μ μ¬μ©ν μ§ νμ§ μμμ§ κ²°μ ν μ μμ΄ μ€λ₯κ° μκΈ°μ§ μλλ€
// μ λμ¨ νμ
μ μ¬μ©νλ κ²½μ°
function getAge(age: number | string) {
if (typeof age === 'number') {
age.toFixed(); // μ μ λμ, ageμ νμ
μ΄ `number`λ‘ μΆλ‘ λκΈ° λλ¬Έμ μ«μ κ΄λ ¨λ APIλ₯Ό μ½κ² μλμμ± ν μ μλ€.
return age;
}
if (typeof age === 'string') {
return age;
}
return new TypeError('age must be number or string');
}- μΈν°μΉμ νμ (Intersection Type)μ μ¬λ¬ νμ μ λͺ¨λ λ§μ‘±νλ νλμ νμ μ μλ―Έν¨
- interface λκ°λ₯Ό μ μνκ³ νλμ λ³μμ ν©μΉλκ²μ λ§ν¨
interface Person {
name: string;
age: number;
}
interface Developer {
name: string;
skill: number;
}
type Capt = Person & Developer;- κ²°κ³Όμ μΌλ‘ Capt λΌλ νμ μ μλμ κ°μ ꡬμ±μ κ°μ§λ€
{
name: string;
age: number;
skill: string;
}
- μλ§ λ Όλ¦¬μ μΌλ‘ μ λμ¨ νμ μ OR, μΈν°μΉμ μ ANDλΌκ³ μκ°ν ν λ° μΈν°νμ΄μ€μ κ°μ νμ μ λ€λ£° λλ μ΄μ κ°μ λ Όλ¦¬μ μ¬κ³ λ₯Ό μ£Όμν΄μΌνλ€
interface Person {
name: string;
age: number;
}
interface Developer {
name: string;
skill: string;
}
function introduce(someone: Person | Developer) {
someone.name; // O μ μ λμ
someone.age; // X νμ
μ€λ₯
someone.skill; // X νμ
μ€λ₯
}- μ¬κΈ°μ introduce() ν¨μμ νλΌλ―Έν°μΈ somenoneμ νμ μ Person, Developer λμ€ νλλ‘ μ μλλλ‘ λ§λ€μλ€
- μ λμ¨ νμ μ Aλ λ μ μκ³ Bλ λ μ μλ νμ μ΄μ§λΌκ³ μκ°νλ©΄ νλΌλ―Έν°μ νμ μ΄ Personλ λκ³ Developerλ λ ν λκΉ
- ν¨μ μμμ λΉμ°ν μ΄ μΈν°νμ΄μ€λ€μ΄ μ 곡νλ μμ±λ€μΈ ageλ skillλ₯Ό μ¬μ©ν μ μκ² μ§λΌκ³ μκ°ν μ μλλ° μ΄λ μ€λ₯λ₯Ό λ°μμν¨λ€
- νμ μ€ν¬λ¦½νΈ κ΄μ μμλ introduce() ν¨μλ₯Ό νΈμΆνλ μμ μ Person νμ μ΄ μ¬μ§ Developer νμ μ΄ μ¬μ§ μ μκ° μλ€
- λλ¬Έμ μ΄λ νμ μ΄ λ€μ΄μ€λ κ°μ μ€λ₯κ° μ λλ λ°©ν₯μΌλ‘ νμ μ μΆλ‘ νκ² λλ€
const capt: Person = { name: 'capt', age: 100 };
introduce(capt); // λ§μ½ `introduce` ν¨μ μμμ `someone.skill` μμ±μ μ κ·Όνκ³ μμΌλ©΄ ν¨μμμ μ€λ₯ λ°μ
const tony: Developer = { name: 'tony', skill: 'iron making' };
introduce(tony); // λ§μ½ `introduce` ν¨μ μμμ `someone.age` μμ±μ μ κ·Όνκ³ μμΌλ©΄ ν¨μμμ μ€λ₯ λ°μ
function introduce(someone: Person | Developer) {
console.log(someone.name); // O μ μ λμ
}- κ²°κ³Όμ μΌλ‘ introduce() ν¨μ μμμλ λ³λμ νμ κ°λ(Type Guard)λ₯Ό μ΄μ©νμ¬ νμ μ λ²μλ₯Ό μ’νμ§ μλ μ΄μ
- κΈ°λ³Έμ μΌλ‘λ Personκ³Ό Developer λ νμ μ 곡ν΅μ μΌλ‘ λ€μ΄μλ μμ±μΈ nameλ§ μ κ·Όν μ μλ€.
-
μΈν°νμ΄μ€λ₯Ό μ°μ§ μμμ κ²½μ° ββ
let person = { name: 'Capt', age: 28 }; function logAge(personObj: { age: number }) { console.log(personObj.age); // μΆλ ₯=28 } logAge(person); // personκ°μ²΄λ₯Ό μ λ¬ -
λ§€μ° λ³΅μ‘μ€λ¬μ
-
μΈν°νμ΄μ€λ₯Ό μ°λ©΄ κΉλν΄μ§λ€
// μΈν°νμ΄μ€λ₯Ό μ΄ κ²½μ° interface personAge { age: number; } function logAge(obj: personAge) { console.log(obj.age); } let person = { name: 'Capt', age: 28 }; logAge(person); // -
νμ μ€ν¬λ¦½νΈ μΈν°νμ΄μ€ νΉμ§
- μΈμλ‘ λ°λ κ°μ²΄μ μμ± κ°μμ μΈν°νμ΄μ€μ μμ± κ°μλ₯Ό μΌμΉμν€μ§ μμλ λλ€
- μΈν°νμ΄μ€λ‘ μ μΈλ μμ±μ μμλ₯Ό μ§ν€μ§ μμλ μκ΄μλ€
μ΅μ μμ±
-
λ°λ κ²½μ°λ μμ±μ κ°μλ₯Ό μΌμΉμν€μ§ μμλ λλ€κ³ νλ€
-
νμ§λ§ 보λ΄λ κ²½μ°(νΈμΆνλκ²½μ°) λ°λμ μμ±μ κ°μμ νμ μ λ§μΆ°μΌ νλλ°
-
μ΅μ μμ±μ μ΄μ©ν΄μ νΉμ μμ±μ νμκ° μλκ² μ§μ ν μ μλ€
-
μμ±μ λμ ?λ₯Ό λΆμ΄λ©΄ μ¬μ©ν μ μλ€
// μ΅μ μμ± μ¬μ© interface CraftBeer { name: string; hop?: number; } let myBeer = { name: 'Saporo' }; function brewBeer(beer: CraftBeer) { console.log(beer.name); // Saporo } brewBeer(myBeer); //νΈμΆ
-
μΈν°νμ΄μ€μ μ μλμ΄μμ§ μμ μμ±μ μ¬μ©νκ³ μΆλ€λ©΄!
interface CraftBeer { brand?: string; } function brewBeer(beer: CraftBeer) { // .. } let myBeer = { brandon: 'what' }'; brewBeer(myBeer as CraftBeer); -
λ§μ½ μνμ§ μμ μμ±λ€μ μΆκ°λ‘ μ¬μ©νκ³ μΆμ λλ μλμ λ°©λ²μ μ¬μ©νλ€
interface CraftBeer { brand?: string; [propName: string]: any; }
-
μΈν°νμ΄μ€λ ν¨μμ νμ μ μ μν λμλ μ¬μ©ν μ μλ€
-
ν¨μμ μΈμμ νμ κ³Ό λ°ν κ°μ νμ μ μ μνλ€
interface login { (username: string, password: string): boolean; } let loginUser: login; loginUser = function(id: string, pw: string) { console.log('λ‘κ·ΈμΈ νμ΅λλ€'); return true; }
-
ν¨μμ λ§μ°¬κ°μ§λ‘ ν΄λμ€κ° μΌμ 쑰건μ λ§μ‘±νλλ‘ νμ κ·μΉμ μ ν μ μλ€
interface CraftBeer { beerName: string; nameBeer(beer: string): void; } class myBeer implements CraftBeer { beerName: string = 'Baby Guinness'; nameBeer(b: string) { this.beerName = b; } constructor() {} }
-
νμ μ€ν¬λ¦½νΈμμλ μ¬λ¬ μΈν°νμ΄μ€λ₯Ό μμλ°μ μ¬μ©ν μ μλ€
interface Person{ name: String; } interface Developer extends Person, Drinker{ skill: string; } interface Drinker { drink: string; } let fe = {} as Developer; fe.name = 'josh'; fe.skill = 'typeScript'; fe.drink = 'Beer'; console.log("νμΈν΄λ³Όκ²μ: " + fe.drink);
-
μΈν°νμ΄μ€ μμ μ¬λ¬ κ°μ§ νμ μ μ‘°ν©νμ¬ λ§λ€ μ μλ€
-
μλλ ν¨μ νμ μ΄λ©΄μ κ°μ²΄ νμ μ μ μν μ μλ μΈν°νμ΄μ€λ₯Ό μ μνκ³ μλ€
interface CraftBeer { (beer: string): string; brand: string; brew(): void; } function myBeer(): CraftBeer { let my = (function(beer: string) {}) as CraftBeer; my.brand = 'Beer Kitchen'; my.brew = function() {}; return my; } let brewedBeer = myBeer(); brewedBeer('My First Beer'); brewedBeer.brand = 'Pangyo Craft'; brewedBeer.brew();
νμ μ€ν¬λ¦½νΈλ‘ λ³μλ ν¨μμ κ°μ μλ°μ€ν¬λ¦½νΈ μ½λμ νμ μ μ μν μ μλ€
- μ¬μ©λ°©λ²
- λ³μλͺ : νμ
- νμ νκΈ°(Type Annotation)λΌκ³ νλ€
let str: string = 'hi';
let num: number = 10;
let isLoggedIn: boolean = false;
let arr: number[] = [1,2,3];
let arr: Array<number> = [1,2,3];
ννμ λ°°μ΄μ κΈΈμ΄κ° κ³ μ λκ³ κ° μμμ νμ μ΄ μ§μ λμ΄ μλ λ°°μ΄ νμμ μλ―Ένλ€
let arr: [string, number] = ['hi', 10];
λ§μ½ μ μνμ§ μμ νμ , μΈλ±μ€λ‘ μ κ·Όν κ²½μ° μ€λ₯κ° λ°μλ¨
arr[1].concat('!'); // Error, 'number' does not have 'concat'
arr[5] = 'hello'; // Error, Property '5' does not exist on type '[string, number]'.
λͺ¨λ νμ
μμ νμ©λλ€
let str: any = 'hi';
let num: any = 10;
let arr: any = ['a', 2, true];
λ³μμλ undefinedμ nullλ§ ν λΉνκ³ , ν¨μμλ λ°ν κ°μ μ€μ ν μ μλ νμ μ μ§μ νλ€
let unuseful: void = undefined;
function notuse(): void {
console.log('sth');
}
ν¬κ² 3κ°μ§ νμ μ μ μν μ μλ€
- ν¨μμ νλΌλ―Έν°(λ§€κ°λ³μ)νμ
- ν¨μμ λ°ν νμ
- ν¨μμ ꡬ쑰 νμ
κΈ°λ³Έ μλ°μ€ν¬λ¦½νΈ μ½λ EX
function sum(a, b) {
return a + b;
}
νμ μ€ν¬λ¦½νΈλ₯Ό μ μ©ν μ΄ν
function sum(a: number, b: number): number {
return a + b; //ν¨μμ λ°ν κ°μ νμ
μΆκ°
}
- ν¨μμ λ°ν κ°μ νμ μ μ νμ§ μμ λλ voidλΌλ μ¬μ©νλ€
νμ
μ€ν¬λ¦½νΈμμλ ν¨μμ μΈμλ₯Ό λͺ¨λ νμ κ°μΌλ‘ κ°μ£Όνλ€
λ°λΌμ ν¨μμ λ§€κ°λ³μλ₯Ό μ€μ νλ©΄ undefined λ null μ΄λΌλ μΈμλ‘ λ겨μΌνλ©°
μ»΄νμΌλ¬μμ μ μλ λ§€κ°λ³μ κ°μ΄ λμ΄μλμ§ νμΈνλ€
μ μλ λ§€κ°λ³μκ°λ§ λ°μμ μκ³ μΆκ°λ‘ μΈμλ₯Ό λ°μμ μλ€
function sum(a: number, b: number): number {
return a + b;
}
sum(10, 20); // 30
sum(10, 20, 30); // μλ¬, μ§μ λ λ§€κ°λ³μκ°μ λμ
sum(10); // μλ¬, μ§μ λ λ§€κ°λ³μκ° λ³΄λ€ μ μ
μμ μκΈ°λ μλ°μ€ν¬λ¦½νΈμ λ³Έλ νΉμ±κ³Ό λ°λλλ€
νμ§λ§ λ§€κ°λ³μμ κ°―μ λ§νΌ μΈμλ₯Ό λκΈ°μ§ μμλ λλ νΉμ±μ μ΄μ©νκ³ μΆλ€λ©΄
? λ₯Ό μ΄μ©ν΄μ μλμ κ°μ΄ μ μν μ μλ€
function sum(a: number, b?: number): number {
return a + b;
}
sum(10, 20); // 30
sum(10, 20, 30); // error, too many parameters
sum(10); // 10
ν¨μμμ λ°λ‘ λ§€κ°λ³μλ₯Ό μ΄κΈ°ννμ¬ μ¬μ©νκ³ μΆλ€λ©΄
function sum(a: number, b = '100'): number {
return a + b;
}
sum(10, undefined); // 110
sum(10); // 110
