πΆ μ§λ
4. ν¨μμ νμ (5/5)
- ν¨μ μ€λ²λ‘λ©
- μ¬μ©μ μ μ νμ κ°λ
5. μΈν°νμ΄μ€ (3/3)
- μΈν°νμ΄μ€
- μΈν°νμ΄μ€ νμ₯νκΈ°
- μΈν°νμ΄μ€ μ μΈ ν©μΉκΈ°
π« μμ½
ν¨μ μ€λ²λ‘λ©
/**
* ν¨μ μ€λ²λ‘λ©
* νλμ ν¨μλ₯Ό λ§€κ°λ³μμ κ°―μλ νμ
μ λ°λΌ
* μ¬λ¬κ°μ§ λ²μ μΌλ‘ λ§λλ λ¬Έλ²
* -> νλμ ν¨μ func
* -> λͺ¨λ λ§€κ°λ³μμ νμ
μ number
* -> ver1. λ§€κ°λ³μκ° 1κ° -> μ΄ λ§€κ°λ³μμ 20μ κ³±ν κ° μΆλ ₯
* -> ver2. λ§€κ°λ³μκ° 3κ° -> μ΄ λ§€κ°λ³μλ€μ λ€ λν κ°μ μΆλ ₯
*/
// λ²μ λ€ -> μ€λ²λ‘λ μκ·Έλμ²
function func(a: number): void; // 1λ²
function func(a: number, b: number, c: number): void; // 2λ²
// μ€μ ꡬνλΆ -> ꡬν μκ·Έλμ²
// function func(a: number);
// function func(a: number, b: number, c: number) λ 1λ² μ€λ²λ‘λ μκ·Έλμ²λ₯Ό λ§λ μλ―Έκ° μμ΄μ§κΈ° λλ¬Έμ ?λ‘ μμμλ μμμλ μλ λ§€κ°λ³μμ κ°μ ννν΄μ€μΌνλ€
function func(a: number, b?: number, c?: number) {
if (typeof b === "number" && typeof c === "number") {
console.log(a + b + c);
} else {
console.log(a * 20);
}
}
// func();
func(1);
// func(1,2);
func(1, 2, 3);
μ¬μ©μ μ μ νμ κ°λ
/**
* μ¬μ©μ μ μ νμ
κ°λ
*/
type Dog = {
name: string;
isBark: boolean;
}
type Cat = {
name: string;
isScratch: boolean;
};
type Animal = Dog | Cat;
// μλ‘μ μ λμ¨ νμ
μΌλ‘ typeμ μμ νμ§ λͺ»νλ κ²½μ°λΌκ³ μΉκ³ ν¨μ μ κ°
function isDog(animal:Animal): animal is Dog{
return (animal as Dog).isBark !== undefined;
}
function isCat(animal: Animal): animal is Cat {
return (animal as Cat).isScratch !== undefined;
}
function warning(animal:Animal) {
if(isDog(animal)){
// animalμ 컀μ λ보면 animal: Dog
animal;
}else if("isScratch" in animal){
// animalμ 컀μ λ보면 animal: Cat
animal;
}
}
μΈν°νμ΄μ€
/**
* μΈν°νμ΄μ€ interface
*/
interface Person {
readonly name: string;
age?: number;
// sayHi: () => void; // ν¨μ νμ
ννμ
sayHi(): void; // νΈμΆ μκ·Έλμ²
sayHi(a: number, b: number): void; // νΈμΆ μκ·Έλμ²
}
const person: Person = {
name: "Natty",
sayHi: function () {
console.log("hi");
},
};
person.sayHi();
person.sayHi(1,2);
μΈν°νμ΄μ€ νμ₯
/**
* μΈν°νμ΄μ€μ νμ₯
*/
type Animal = {
name: string;
color: string;
};
interface Dog extends Animal {
isBark: boolean;
}
const dog: Dog = {
name: "",
color: "",
isBark: true,
};
interface Cat extends Animal {
isScratch: boolean;
}
interface Chicken extends Animal {
isFly: boolean;
}
interface DogCat extends Dog, Cat {}
const dogCat: DogCat = {
name: "",
color: "",
isBark: false,
isScratch: true,
};
μΈν°νμ΄μ€ μ μΈ ν©μΉκΈ°
/**
* μ μΈ ν©μΉ¨
*/
interface Person {
name: string;
}
interface Person {
// name: number;
// νμ μμ± μ μΈ μμλ κ°μ νμμ΄ μμ΄μΌν¨. μλΈνμ
λ μλλ€
name: string;
age: number;
}
// νμ₯μμλ μλΈνμ
μΈ string literal typeμ΄μ΄λ okμμ§λ§ μ μΈ ν©μΉ¨μ κ²½μ°μλ μλΈνμ
λ μλλ€
interface Developer extends Person {
name: "hello";
}
const person: Person = {
name: "",
age: 25,
};
/**
* λͺ¨λ 보κ°
*/
interface Lib {
a: number;
b: number;
}
interface Lib {
c: string;
}
const lib: Lib = {
a: 1,
b: 2,
c: "xoxo",
// c λ₯Ό μΆκ°νκ³ μΆμ λ, μ μΈ ν©μΉ¨μ μ΄μ©ν΄μ νμ
μ μΆκ°ν μ μλ€.
};
π¬ κ³Όμ
Q1. ꡬν μκ·Έλμ²λ₯Ό μμ±νμΈμ
function add(): number;
function add(a: number): number;
function add(a: number, b: number, c: number): number;
function add(a?: number, b?: number, c?: number) {
return a || 0 + b || 0 + c || 0;
}
add();
console.log(add(1));
console.log(add(1, 2, 3));
Q2. μ¬μ©μ μ μ νμ κ°λλ₯Ό μμ±νμΈμ. (νμ μμ X)
type Guest = {
visitCount: number;
};
type Member = {
id: string;
};
type User = Guest | Member;
function isGuest(user: User): user is Guest {
if (!(user as Guest).visitCount) {
return false;
}
return true;
}
function isMember(user: User): user is Member {
if(!(user as Member).id) {
return false;
}
return true;
}
Q3. μ¬μ©μ μ μ νμ κ°λλ₯Ό μμ±νμΈμ. (νμ μμ X)
interface Person {
name: string;
}
interface Student extends Person {
grade: "A" | "B" | "C";
}
interface Developer extends Person {
skill: string[];
}
interface Boss extends Person {
company: string;
}