โจํ์ ๊ณผ ์งํฉ
ํ์ ์ ์ฌ๋ฌ ๊ฐ์ ๊ฐ์ ํฌํจํ๋ ์งํฉ์ผ๋ก ์๊ฐํ ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ ํ์ ๊ฐ์๋ ์๋ก ํฌํจ ๊ด๊ณ(์ํผ-๋ถ๋ชจ ํ์ , ์๋ธ-์์ ํ์ )์ด ์กด์ฌํ๋ค.
โํ์ ํธํ์ฑ
A์ B ๋๊ฐ์ ํ์ ์ด ์กด์ฌํ ๋ A ํ์ ์ ๊ฐ์ B ํ์ ์ผ๋ก ์ทจ๊ธํด๋ ๊ด์ฐฎ์์ง ํ๋จํ๋ ๊ฒ
- ์ ์บ์คํ : ์๋ธ ํ์ ์ ๊ฐ์ ์ํผ ํ์ ์ ๊ฐ์ผ๋ก ์ทจ๊ธํ๋ ๊ฒ โ
- ๋ค์ด์บ์คํ : ๋ฐ๋๋ก ์ํผ ํ์ ์ ๊ฐ์ ์๋ธ ํ์ ์ ๊ฐ์ผ๋ก ์ทจ๊ธํ๋ ๊ฒ โ
→ ์งํฉ์ ํฌํจ ๊ด๊ณ์ฒ๋ผ ์ ์บ์คํ ์ ๋ชจ๋ ์ํฉ์ ๊ฐ๋ฅํ์ง๋ง, ๋ค์ด ์บ์คํ ์ ๋๋ถ๋ถ์ ์ํฉ์ ๋ถ๊ฐํ๋ค.
โUnknown(์ ์ฒด ์งํฉ)
๋ชจ๋ ์๋ธ ํ์ ์ ๋ถ๋ถ์งํฉ์ผ๋ก ๊ฐ๋ ์ ์ฒด ์งํฉ์ผ๋ก unknown ํ์ ๋ณ์์ ๋ชจ๋ ํ์ ์ ๊ฐ์ ํ ๋นํ ์ ์๋ค. ๋ฐ๋๋ก unknown ํ์ ์ ๊ฐ์ any๋ฅผ ์ ์ธํ ์ด๋ ํ ํ์ ์ ๋ณ์์๋ ํ ๋นํ ์ ์๋ค.
โNever(๊ณต์งํฉ)
never์ ํ์ ๊ณ์ธต๋์์ ๊ฐ์ฅ ์๋์ ๊ณต์งํฉ์ ์๋ฏธํ๋ค. ๊ณต์งํฉ์ ์๋ฌด ๊ฒ๋ ์์์ ์๋ฏธํ๋ฉฐ never ํ์ ๋ณ์์๋ ์ด๋ค ํ์ ์ ๊ฐ๋ ํ ๋นํ ์ ์๋ค. ๋ฐ๋๋ก never ํ์ ์ ๋ชจ๋ ํ์ ์ผ๋ก ์ ์บ์คํ ํ ์ ์๋ค.
โVoid
undefined๋ ์ํผ ํ์ ์ด๋ฏ๋ก void๋ก ์ ์ธํ ํจ์์์ undefined๋ฅผ ๋ฐํํด๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง ์๋๋ค. voidํ์ ์๋ undefined, never ํ์ ๋ง ํ ๋นํ ์ ์๋ค.
โAny
ํ์ ๊ณ์ธต๋๋ฅผ ์์ ํ ๋ฌด์ํ๋ ์นํธํค ํ์ ์ด๋ค. ๋ชจ๋ ํ์ ์ ์ํผํ์ ์ด ๋ ์๋ ์๊ณ ๋ชจ๋ ํ์ ์ ์๋ธ ํ์ ์ด ๋ ์๋ ์๋ค.
โจ ๊ฐ์ฒด ํ์ ์ ํธํ์ฑ
๊ฐ์ฒด๋ ๊ฐ์ฒด๊ฐ ๋ด๋ ํ๋กํผํฐ ๊ตฌ์กฐ์ ๋ฐ๋ผ ์ํผ~์๋ธ ๊ด๊ณ๊ฐ ๋ง๋ค์ด์ง ์ ์๋ค.
type Animal = {
name: string;
color: string;
};
type Dog = {
name: string;
color: string;
breed: string;
};
let animal: Animal = {
name: "๊ธฐ๋ฆฐ",
color: "yellow",
};
let dog: Dog = {
name: "๋๋์ด",
color: "brown",
breed: "์ง๋",
};
animal = dog; // โ
OK (โต ์๋ธ ํ์
์ธ dog๋ฅผ ์ํผ ํ์
์ธ animal์ ํ ๋นํ๋ ์
์บ์คํ
)
dog = animal; // โ NO (โต ์ํผ ํ์
์ธ animal๋ฅผ ์๋ธ ํ์
์ธ dog์ ํ ๋นํ๋ ๋ค์ด์บ์คํ
)
โ์ด๊ณผ ํ๋กํผํฐ ๊ฒ์ฌ
๋ณ์๋ฅผ ๊ฐ์ฒด ๋ฆฌํฐ๋ด๋ก ์ด๊ธฐํํ ๋๋ ํ์ ์ ์ ์๋ ํ๋กํผํฐ ์ธ์ ๋ค๋ฅธ ์ด๊ณผ๋ ํ๋กํผํฐ๋ฅผ ๊ฐ๋ ๊ฐ์ฒด๋ฅผ ๋ณ์์ ํ ๋นํ์ง ๋ชปํ๋๋ก ์ด๊ณผ ํ๋กํผํฐ ๊ฒ์ฌ๊ฐ ๋ฐ๋๋๋ค.
- ๋ณ์๋ฅผ ์ด๊ธฐํํ ๋ ๊ฐ์ฒด ๋ฆฌํฐ๋ด์ ์ฌ์ฉํ์ง๋ง ์์ผ๋ฉด ๋ฐ์ํ์ง ์๋๋ค. ์ฆ, ๊ฐ์ ๋ณ๋์ ๋ค๋ฅธ ๋ณ์์ ๋ณด๊ดํ ๋ค์ ๋ณ์ ๊ฐ์ ์ด๊ธฐํ ๊ฐ์ผ๋ก ์ฌ์ฉํ๋ฉด ๋ฐ์ํ์ง ์๋๋ค.
interface Person {
name: string;
age: number;
}
const personData = {
name: "Alice",
age: 25,
job: "Engineer" // ์ด๊ณผ ํ๋กํผํฐ ํฌํจ
};
const person: Person = personData; // ์ค๋ฅ ์์
- ์ด๊ณผ ํ๋กํผํฐ ๊ฒ์ฌ๋ ํจ์์ ๋งค๊ฐ๋ณ์์๋ ๋์ผํ๊ฒ ๋ฐ์ํ๋ฉฐ, ์ด ๋๋ ๋ณ์์ ๋ฏธ๋ฆฌ ๊ฐ์ ๋ด์๋ ๋ค์ ๋ณ์๊ฐ์ ์ธ์๋ก ์ ๋ฌํ๋ฉด ๋ฐ์ํ์ง ์๋๋ค.
interface Person {
name: string;
age: number;
}
function greet(person: Person) {
console.log(`Hello, ${person.name}`);
}
// ์ด๊ณผ ํ๋กํผํฐ ๊ฒ์ฌ ๋ฐ์
greet({
name: "Alice",
age: 25,
job: "Engineer" // ์ค๋ฅ: 'job' ํ๋กํผํฐ๋ Person ํ์
์ ์กด์ฌํ์ง ์์
});
โจ ๋์ ํ์ - ํฉ์งํฉ, ๊ต์งํฉ
โํฉ์งํฉ(Union)
// Union ํ์
let a: string | number | boolean;
a = 1;
a = "hello";
a = true;
// Union ๋ฐฐ์ด ํ์
let arr: (number | string | boolean)[] = [1, "hello", true];
// Union ๊ฐ์ฒด ํ์
type Dog = {
name: string;
color: string;
};
type Person = {
name: string;
language: string;
};
type Union1 = Dog | Person;
โ๊ต์งํฉ(Intersection)
// Intersection ํ์
let variable: number & string; // never ํ์
์ผ๋ก ์ถ๋ก
// ๋๋ค์์ ๊ธฐ๋ณธ ํ์
๋ค ๊ฐ์๋ ์๋ก ๊ณต์ ํ๋ ๊ต์งํฉ์ด ์๊ธฐ ๋๋ฌธ์ Intersection ํ์
์ ๋ณดํต ๊ฐ์ฒด ํ์
์์ ์ฌ์ฉ๋จ
// Intersection ๊ฐ์ฒด ํ์
type Dog = {
name: string;
color: string;
};
type Person = {
name: string;
language: string;
};
type Intersection = Dog & Person;
let intersection1: Intersection = {
name: "",
color: "",
language: "",
};
โจํ์ ์ถ๋ก
โํ์ ์ถ๋ก
ํ์ ์คํฌ๋ฆฝํธ์์ ํ์ ์ด ์ ์๋์ด ์์ง ์์ ๋ณ์์ ํ์ ์ ์๋์ผ๋ก ์ถ๋ก ํ๋ ๊ฒ
โํ์ ์ถ๋ก ์ด ๊ฐ๋ฅํ ์ํฉ๋ค
1. ๋ณ์ ์ ์ธ
: ์ผ๋ฐ์ ์ธ ๋ณ์ ์ ์ธ์ ๊ฒฝ์ฐ ์ด๊ธฐ๊ฐ์ ๊ธฐ์ค์ผ๋ก ํ์ ์ด ์ถ๋ก ๋๋ค.(๊ฐ์ฒด ํฌํจ)
let age = 30; // number๋ก ์ถ๋ก ๋จ
let name = "Alice"; // string์ผ๋ก ์ถ๋ก ๋จ
let person = {
name: "Alice",
age: 30
}; // { name: string; age: number }๋ก ์ถ๋ก ๋จ
2. ๊ตฌ์กฐ ๋ถํด ํ ๋น
let person = {
name: "Alice",
age: 30
};
let { name, age } = person; // name์ string, age๋ number๋ก ์ถ๋ก ๋จ
const [first, second] = [10, "hello"]; // first๋ number, second๋ string์ผ๋ก ์ถ๋ก ๋จ
3.ํจ์์ ๋ฐํ๊ฐ
function getPerson() {
return {
name: "Alice",
age: 30
};
}
const person = getPerson(); // { name: string; age: number }๋ก ์ถ๋ก ๋จ
4.๊ธฐ๋ณธ๊ฐ์ด ์ค์ ๋ ๋งค๊ฐ๋ณ์
function greet(name = "Guest") {
console.log(`Hello, ${name}`);
}
greet(); // name์ string์ผ๋ก ์ถ๋ก ๋จ
โ์ฃผ์ํด์ผํ ์ํฉ๋ค
1. ์์์ ์ผ๋ก any ํ์ ์ผ๋ก ์ถ๋ก
์์์ ์ผ๋ก ์ถ๋ก ๋ any ํ์ ์ ์ฝ๋์ ํ๋ฆ์ ๋ฐ๋ผ ํ์ ์ด ๊ณ์ ๋ณํํ๋ค. ์ด๋ฅผ any์ ์งํ๋ผ๊ณ ํ๋ค.
let d;
// ๋ณ์ ์ ์ธ ์ ์ด๊ธฐ๊ฐ์ ์๋ตํ๋ฉด any๋ก ์ถ๋ก ๋๋ค.
// ๋งค๊ฐ๋ณ์์ ํ์
์ด ์์์ any๋ก ์ถ๋ก ๋ ๋์ ๋ฌ๋ฆฌ ์ผ๋ฐ ๋ณ์์ ํ์
์ด any๋ก ์ถ๋ก ๋๋ ์ํฉ์ ์ค๋ฅ๋ก ํ๋จํ์ง ์๋๋ค.
d = 10; // ์์์ any ํ์
์ ๋ณ์์ ๊ฐ์ ํ ๋นํ๋ฉด
d.toFixed(); // ๋ค์ ๋ผ์ธ๋ถํฐ any ํ์
์ด ํด๋น ๊ฐ์ ํ์
์ผ๋ก ๋ณํํ๋ค.
d = "hello"; // ์ฌ๊ธฐ์ ๋ค๋ฅธ ๊ฐ์ ํ ๋นํ๋ฉด ๋ ๊ทธ ๊ฐ์ ๋ง๋ ํ์
์ผ๋ก ๋ณํํ๋ค.
d.toUpperCase();
d.toFixed(); // ์ค๋ฅ! string ํ์
์ number ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ ค ํจ
2. const ์์์ ์ถ๋ก
const num = 10;๊ณผ const str = "hello";๋ ๊ฐ๊ฐ number์ string ํ์ ์ผ๋ก ์ถ๋ก ๋๋ ๊ฒ์ด ์๋๋ผ, ๋ฆฌํฐ๋ด ํ์ ์ธ 10๊ณผ "hello"๋ก ์ถ๋ก ๋๋ค. ์ด ํน์ง์ TypeScript์ ๋ฆฌํฐ๋ด ํ์ ์ถ๋ก ๊ธฐ๋ฅ์ผ๋ก, ํน์ ๊ฐ๋ง์ ๊ฐ์ง ์ ์๋ ๊ณ ์ ๋ ํ์ ์ ์ ๊ณตํด ์ฝ๋์ ํ์ ์์ ์ฑ์ ๋์ฑ ๊ฐํํ๋ค.
const num = 10;
// 10 Number Literal ํ์
์ผ๋ก ์ถ๋ก
const str = "hello";
// "hello" String Literal ํ์
์ผ๋ก ์ถ๋ก
โ์ต์ ์ ๊ณตํต ํ์
// ๋ค์ํ ํ์
์ ์์๋ฅผ ๋ด์ ๋ฐฐ์ด์ ๋ณ์์ ์ด๊ธฐ๊ฐ์ผ๋ก ์ค์ ํ๋ฉด, ์ต์ ์ ๊ณตํต ํ์
์ผ๋ก ์ถ๋ก ๋๋ค.
let arr = [1, "string"];
// (string | number)[] ํ์
์ผ๋ก ์ถ๋ก
โจ ํ์ ๋จ์ธ
๊ฐ as ํ์ ์ผ๋ก ํน์ ๊ฐ์ ์ํ๋ ํ์ ์ผ๋ก ๋จ์ธํ๋ ๊ฒ์ด๋ค.
์ฉ๋ → ํน์ ๊ตฌ์กฐ ํ์ ์ด ์ค์ ๋ ๊ฐ์ฒด ๋ณ์์ ์ด๊ธฐ๊ฐ์ผ๋ก ๋น ๊ฐ์ฒด๋ฅผ ๋ฃ๊ณ ์ถ์ ๋, ์ด๊ณผ ํ๋กํผํฐ ๊ฒ์ฌ๋ฅผ ํผํ ๋
1. ํน์ ๊ตฌ์กฐ ํ์ ์ด ์ค์ ๋ ๊ฐ์ฒด ๋ณ์์ ์ด๊ธฐ๊ฐ์ผ๋ก ๋น ๊ฐ์ฒด๋ฅผ ๋ฃ๊ณ ์ถ์ ๋
interface Person {
name: string;
age: number;
}
let person = {} as Person;
// ์ด๊ธฐ๊ฐ์ผ๋ก ๋น ๊ฐ์ฒด๋ฅผ ๋ฃ๊ณ ์ถ์ง๋ง, ํ์
๋จ์ธ์ ํตํด ๋น ๊ฐ์ฒด๊ฐ Person ํ์
์์ ๋ช
์ํจ
// ์ดํ์ ํ์ํ ์์ฑ์ ์ถ๊ฐ
person.name = "Alice";
person.age = 25;
2. ์ด๊ณผ ํ๋กํผํฐ ๊ฒ์ฌ๋ฅผ ํผํ ๋
interface Person {
name: string;
age: number;
}
const person = {
name: "Alice",
age: 25,
job: "Engineer"
} as Person;
// 'job' ์์ฑ์ Person ํ์
์ ์ ์๋์ด ์์ง ์์ง๋ง, ์ด๊ณผ ํ๋กํผํฐ ๊ฒ์ฌ๋ฅผ ํผํ๊ธฐ ์ํด as๋ฅผ ์ฌ์ฉํจ
โํ์ ๋จ์ธ์ ์กฐ๊ฑด
๊ฐ as ํ์ ํ์์ ๋จ์ธ์์ A as B๋ก ํํํ์ ๋ ์๋์ ๋ ์กฐ๊ฑด ์ค ํ ๊ฐ์ง๋ฅผ ๋ฐ๋์ ๋ง์กฑํด์ผ ํ๋ค.
- A๊ฐ B์ ์ํผํ์ ์ด๋ค.
- A๊ฐ B์ ์๋ธํ์ ์ด๋ค.
let num1 = 10 as never; // โ
let num2 = 10 as unknown; // โ
let num3 = 10 as string; // โ
โ๋ค์ค ๋จ์ธ
ํ์ ๋จ์ธ์ ๋ค์ค์ผ๋ก ๊ฐ๋ฅํ๊ณ , ์ด๋ฅผ ์ด์ฉํ๋ฉด ์์ ๋ถ๊ฐ๋ฅํ๋ ๋จ์ธ ์์ ๋ฅผ ๊ฐ๋ฅํ๊ฒ ๋ง๋ค ์ ์๋ค.
ํ์ง๋ง ์ด๊ฒ์ ์ค์ ๋ก ๊ทธ ๊ฐ์ ํด๋น ํ์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ๋ ๊ฒ์ด ์๋๋ผ ๋จ์ ๋์์์ ๋ถ๊ณผํ๋ฉฐ ์ค๋ฅ ๋ฐ์ ํ๋ฅ ์ ๋์ด๊ธฐ ๋๋ฌธ์ ๊ผญ ํ์ํ ์ํฉ์์๋ง ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
let num3 = 10 as unknown as string;
โconst ๋จ์ธ
ํน์ ๊ฐ์ const ํ์ ์ผ๋ก ๋จ์ธํ๋ฉด ๋ง์น ๋ณ์๋ฅผ const๋ก ์ ์ธํ ๊ฒ๊ณผ ๊ฐ์ด ๋ฆฌํฐ๋ด ํ์ ์ผ๋ก ๋ณ๊ฒฝ๋๋ค.
let name = "Alice";
// name์ ํ์
์ string์ผ๋ก ์ถ๋ก ๋จ
const nameConst = "Alice";
// nameConst์ ํ์
์ "Alice"๋ผ๋ ๋ฆฌํฐ๋ด ํ์
์ผ๋ก ์ถ๋ก ๋จ
let nameAsConst = "Alice" as const;
// nameAsConst์ ํ์
์ "Alice"๋ผ๋ ๋ฆฌํฐ๋ด ํ์
์ผ๋ก ์ถ๋ก ๋จ
โNot Null ๋จ์ธ
๊ฐ as ํ์ ์ ๋ฐ๋ฅด์ง ์๋ ๋จ์ธ์ผ๋ก, ๊ฐ ๋ค์ ๋๋ํ(!)๋ฅผ ๋ถ์ฌ์ฃผ๋ฉด ์ด ๊ฐ์ด undefined์ด๊ฑฐ๋ null์ด ์๋ ๊ฒ์ผ๋ก ํ๋จํ ์ ์๋ค.
type Post = {
title: string;
author?: string;
};
let post: Post = {
title: "๊ฒ์๊ธ1",
};
const len: number = post.author.length; // ์ค๋ฅ! post.author๊ฐ undefined๊ฐ ๊ฐ๋ฅํ๋ค๊ณ ์ฌ๊ฒจ์ง๋ค.
const len: number = post.author!.length;
// !๋ฅผ ๋ถ์ฌ post.author๊ฐ non null ์์ ๋จ์ธํด์ ์ค๋ฅ๋ฅผ ํด๊ฒฐํ๋ค.
โจํ์ ์ขํ๊ธฐ
์กฐ๊ฑด๋ฌธ์ ์ด์ฉํด ์กฐ๊ฑด๋ฌธ ๋ด๋ถ์์ ๋ณ์๊ฐ ํน์ ํ์ ์์ ๋ณด์ฅํ๋ฉด ํด๋น ์กฐ๊ฑด๋ฌธ ๋ด๋ถ์์๋ ๋ณ์์ ํ์ ์ด ๋ณด์ฅ๋ ํ์ ์ผ๋ก ์ขํ์ง๋ ๊ฒ
if(typeof === …) ์ฒ๋ผ ์กฐ๊ฑด๋ฌธ๊ณผ ํจ๊ป ์ฌ์ฉํด ํ์ ์ ์ขํ๋ ์ด๋ฐ ํํ๋ค์ “ํ์ ๊ฐ๋”๋ผ๊ณ ๋ถ๋ฅธ๋ค.
โinstanceof ํ์ ๊ฐ๋
instanceof๋ number๋ string๊ณผ ๊ฐ์ ๊ธฐ๋ณธ ์๋ฃํ์๋ ์ฌ์ฉํ ์ ์๋ค. instanceof ์ฐ์ฐ์๋ ๊ฐ์ฒด๊ฐ ํน์ ํด๋์ค๋ ์์ฑ์์ ์ธ์คํด์ค์ธ์ง ํ์ธํ๋๋ฐ ์ฌ์ฉ๋๋ฉฐ, ๊ธฐ๋ณธ ์๋ฃํ์ด ์๋ ๊ฐ์ฒด ํ์ ์๋ง ์ ์ฉ๋๋ค.
// ๋ด์ฅ ํด๋์ค ํ์
(์๋ ์์ ์ Date)์ ์ฌ์ฉ ๊ฐ๋ฅ
function func(value: number | string | Date | null) {
if (typeof value === "number") {
console.log(value.toFixed());
} else if (typeof value === "string") {
console.log(value.toUpperCase());
} else if (value instanceof Date) {
console.log(value.getTime());
}
}
โin ํ์ ๊ฐ๋
in ํ์ ๊ฐ๋๋ TypeScript์์ ๊ฐ์ฒด์ ํน์ ํ๋กํผํฐ๊ฐ ์กด์ฌํ๋์ง ๊ฒ์ฌํ๋ ๋ฐฉ๋ฒ์ด๋ค. ์ด๋ฅผ ํตํด TypeScript๋ ํด๋น ํ๋กํผํฐ๊ฐ ์กด์ฌํ ๊ฒฝ์ฐ, ํด๋น ํ๋กํผํฐ ํ์ ์ ์์ ํ๊ฒ ์ถ๋ก ํ ์ ์๋ค. in ์ฐ์ฐ์๋ ์ฃผ๋ก ์ ๋์จ ํ์ ์์ ํน์ ํ๋กํผํฐ๊ฐ ํฌํจ๋ ํ์ ์ ๊ตฌ๋ถํ๋๋ฐ ์ฌ์ฉ๋๋ค.
interface Dog {
bark: () => void;
}
interface Cat {
meow: () => void;
}
function makeSound(animal: Dog | Cat) {
if ('bark' in animal) {
animal.bark(); // TypeScript๋ animal์ด Dog ํ์
์์ ์ถ๋ก
} else {
animal.meow(); // TypeScript๋ animal์ด Cat ํ์
์์ ์ถ๋ก
}
}
โจ ์๋ก์ ์ ๋์จ ํ์
“์๋ก์ ์ ๋์จ ํ์ ”์ด๋ ๊ต์งํฉ์ด ์๋ ํ์ ๋ค ์ฆ ์๋ก์ ๊ด๊ณ์ ์๋ ํ์ ๋ค์ ๋ชจ์ ๋ง๋ ์ ๋์จ ํ์ ์ด๋ค.
type Admin = {
name: string;
kickCount: number;
};
type Member = {
name: string;
point: number;
};
type Guest = {
name: string;
visitCount: number;
};
type User = Admin | Member | Guest;
function login(user: User) {
if ("kickCount" in user) {
// Admin
console.log(`${user.name}๋ ํ์ฌ๊น์ง ${user.kickCount}๋ช
์ถ๋ฐฉํ์ต๋๋ค`);
} else if ("point" in user) {
// Member
console.log(`${user.name}๋ ํ์ฌ๊น์ง ${user.point}๋ชจ์์ต๋๋ค`);
} else {
// Guest
console.log(`${user.name}๋ ํ์ฌ๊น์ง ${user.visitCount}๋ฒ ์ค์
จ์ต๋๋ค`);
}
}
์์ ๊ฐ์ ํ์ ๊ด๋ฆฌ ํ๋ก๊ทธ๋จ์์ 3๊ฐ์ ํ์ ์ ๊ตฌ๋ณํ๊ธฐ ์ํ ์กฐ๊ฑด์์ ์ง๊ด์ ์ด์ง ๋ชปํ๋ค. ๋ฐ๋ผ์ ๋ค์๊ณผ ๊ฐ์ด ๊ฐ ํ์ ์ ํ๊ทธ ํ๋กํผํฐ๋ฅผ ์ถ๊ฐํ ์ ์๋ค.
type Admin = {
tag: "ADMIN";
name: string;
kickCount: number;
};
type Member = {
tag: "MEMBER";
name: string;
point: number;
};
type Guest = {
tag: "GUEST";
name: string;
visitCount: number;
};
// ํ๊ทธ ํ๋กํผํฐ๋ฅผ ํตํด 3๊ฐ์ ์๋ก์ ์ ๋์จ ํ์
์ ๋ ์ง๊ด์ ์ผ๋ก ๊ตฌ๋ณํ ์ ์๊ฒ ๋์๋ค.
function login(user: User) {
if (user.tag === "ADMIN") {
console.log(`${user.name}๋ ํ์ฌ๊น์ง ${user.kickCount}๋ช
์ถ๋ฐฉํ์ต๋๋ค`);
} else if (user.tag === "MEMBER") {
console.log(`${user.name}๋ ํ์ฌ๊น์ง ${user.point}๋ชจ์์ต๋๋ค`);
} else {
console.log(`${user.name}๋ ํ์ฌ๊น์ง ${user.visitCount}๋ฒ ์ค์
จ์ต๋๋ค`);
}
}
// switch๋ฅผ ์ด์ฉํ ๋ ์ง๊ด์ ์ธ ์กฐ๊ฑด ๋ถ๋ฅ๋ ๊ฐ๋ฅํ๋ค.
function login(user: User) {
switch (user.tag) {
case "ADMIN": {
console.log(`${user.name}๋ ํ์ฌ๊น์ง ${user.kickCount}๋ช
์ถ๋ฐฉํ์ต๋๋ค`);
break;
}
case "MEMBER": {
console.log(`${user.name}๋ ํ์ฌ๊น์ง ${user.point}๋ชจ์์ต๋๋ค`);
break;
}
case "GUEST": {
console.log(`${user.name}๋ ํ์ฌ๊น์ง ${user.visitCount}๋ฒ ์ค์
จ์ต๋๋ค`);
break;
}
}
}
'๐ป์น(Web) > React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
React hook: useEffect, useState, useMemo, useCallback (0) | 2024.11.10 |
---|---|
๋น๋ ๋๊ตฌ ๋น๊ต: Webpack๊ณผ Vite์ ์ฐจ์ด / ์ปดํ์ผ๊ณผ ๋น๋ (0) | 2024.11.10 |
[TypeScript]TypeScript์ ๊ฐ์ ๋ฐ ๊ธฐ์ด (3) | 2024.09.03 |
ํ๋ก ํธ์๋ ์ฝ๋ฉ์ปจ๋ฒค์ (0) | 2024.07.13 |
[React]Custom Hook (0) | 2024.06.28 |