title: TypeScript
tags:
- frontend
- typescript
- Interface
- TypeAlias
- Class
created: 2025-03-27
TypeScript
Type Alias
λ κΈ°μ‘΄ νμ
μ λ³μΉ(Alias) μ λΆμ¬νλ κΈ°λ₯μ
λλ€.
κ°μ²΄λΏλ§ μλλΌ μ λμ¨ νμ
, ν¨μ νμ
, νν λ± λ€μν νμ
μ μ μν λ μ¬μ©λ©λλ€.
// κΈ°λ³Έ νμ
μ λ³μΉ λΆμ¬
type UserId = number;
type UserName = string;
type IsActive = boolean;
let userId: UserId = 12345;
let userName: UserName = "νκΈΈλ";
let isActive: IsActive = true;
// μ£Όλ¬Έ μν νμ
μ μ
type OrderStatus = "pending" | "processing" | "shipped" | "delivered" | "canceled";
type Order = {
id: number;
productId: number;
customer: string;
quantity: number;
status: OrderStatus;
orderDate: Date;
};
// μ¬μ© μ
const order1: Order = {
id: 1001,
productId: 5,
customer: "μ΄μ§μ",
quantity: 2,
status: "pending",
orderDate: new Date(),
};
β μ λμ¨ νμ μ νμ©νλ©΄ μ νλ κ°λ§ μ¬μ©ν μ μμ΄ μμ ν μ½λ μμ±μ΄ κ°λ₯!
// ν¨μ νμ
λ³μΉ
type Calculator = (a: number, b: number) => number;
const add: Calculator = (x, y) => x + y;
const multiply: Calculator = (x, y) => x * y;
console.log(add(10, 20)); // 30
console.log(multiply(10, 20)); // 200
μ½κΈ° μ μ© μμ±μ μ¬μ©νλ©΄ κ°μ²΄μ λΆλ³μ±(immutability) μ μ μ§ν μ μμ΅λλ€.
type User = {
readonly id: number;
readonly createdAt: Date;
name: string;
age: number;
};
const user: User = {
id: 12345,
createdAt: new Date(),
name: "νκΈΈλ",
age: 30,
};
// κ°λ₯: μΌλ° μμ± μμ
user.name = "κΉμ² μ";
user.age = 31;
// μλ¬: readonly μμ± μμ λΆκ°
// user.id = 67890;
// user.createdAt = new Date();
β μ½κΈ° μ μ© μμ±μ νμ©νλ©΄ λ°μ΄ν°λ₯Ό 보νΈν μ μμ!
Interface
λ κ°μ²΄μ ꡬ쑰λ₯Ό μ μνλ μ©λλ‘ μ¬μ©λ©λλ€. type alias
μ μ μ¬νμ§λ§, extends
λ₯Ό ν΅ν΄ λ€λ₯Έ μΈν°νμ΄μ€λ₯Ό νμ₯ν μ μμΌλ©°, ν΄λμ€μμλ implements
ν€μλλ‘ μ¬μ©ν μ μμ΅λλ€.
interface Car {
model: string;
price: number;
tax(): number;
}
const myCar: Car = {
model: "Tesla",
price: 5000,
tax() {
return this.price * 0.1;
},
};
interface Animal {
name: string;
}
interface Dog extends Animal {
breed: string;
}
const myDog: Dog = {
name: "λ°λμ΄",
breed: "골λ 리νΈλ¦¬λ²",
};
β
**extends**
λ₯Ό μ¬μ©νμ¬ κΈ°μ‘΄ μΈν°νμ΄μ€λ₯Ό νμ₯ν μ μμ!
λΉκ΅ νλͺ© | Type Alias | Interface |
---|---|---|
κ°μ²΄ ꡬ쑰 μ μ | β κ°λ₯ | β κ°λ₯ |
νμ₯ λ°©λ² | & μ°μ°μ μ¬μ© |
extends ν€μλ μ¬μ© |
μ λμ¨ νμ μ¬μ© | β κ°λ₯ | β λΆκ°λ₯ |
ν¨μ νμ μ μ | β κ°λ₯ | β κ°λ₯ |
μ€λ³΅ μ μΈ | β λΆκ°λ₯ | β μλ λ³ν© κ°λ₯ |
TypeScriptμμ ν΄λμ€(Class) λ κ°μ²΄λ₯Ό λ§λ€κΈ° μν μ€κ³λ(ν
νλ¦Ώ) μ
λλ€.
μ½λλ₯Ό μ¬μ¬μ©νκ³ , ꡬ쑰ννμ¬ ν¨μ¨μ μΈ νλ‘κ·Έλλ°μ΄ κ°λ₯ν©λλ€.
class Car {
model: string;
price: number;
constructor(model: string, price: number) {
this.model = model;
this.price = price;
}
tax(): number {
return this.price * 0.1;
}
}
class Animal {
name: string;
constructor(name: string) {
this.name = name;
}
sound() {
console.log(`${this.name}μ΄(κ°) μ리λ₯Ό λ
λλ€.`);
}
}
class Dog extends Animal {
bark() {
console.log(`${this.name}μ΄(κ°) λ©λ©! μ§μ΅λλ€.`);
}
}
β λΆλͺ¨ ν΄λμ€μ κΈ°λ₯μ μ μ§νλ©΄μ μλ‘μ΄ κΈ°λ₯ μΆκ° κ°λ₯!
type
, interface
, class
λ₯Ό μ¬μ©ν κΉ?β κ°μ²΄ ꡬ쑰λ₯Ό μ μν λ β interface
μ¬μ© (νμ₯ κ°λ₯)
β μ λμ¨ νμ
, νν, ν¨μ νμ
μ μ μν λ β type alias
μ¬μ©
β ν΄λμ€λ₯Ό μ¬μ©ν λ, μΈν°νμ΄μ€λ₯Ό νμ© β interface
+ implements
μ¬μ©
β ν΄λμ€μμ κ³΅ν΅ μμ±μ λ¬Όλ €λ°μ λ β extends
μ¬μ©
μ΄λ² κΈμμλ TypeScriptμμ μμ£Ό μ¬μ©λλ type alias
, interface
, class
μ κ°λ
κ³Ό μ°¨μ΄μ μ μ΄ν΄λ³΄μμ΅λλ€. κ°κ°μ κ°λ
μ μ νμ©νλ©΄ λ μμ ν νμ
κΈ°λ° μ½λλ₯Ό μμ±ν μ μμ΅λλ€. π―