νμ΅ ν€μλ
μΈν°νμ΄μ€(interface)
νμ
λ³μΉ(Type) vs μΈν°νμ΄μ€(interface)
νμ
λ³μΉ
λ³μλ₯Ό μ μΈνλ― νμ
μ λ³λλ‘ μ μν μ μλ€.
type νμ
μ΄λ¦ = νμ
νμ
μ μ΄λ¦μ λλ¬Έμλ‘ μ§μ
type TGender = 'female' | 'male';
type TUser = {
name: string;
age: number;
gender: TGender; // ππ» typeλ³μΉ μμ λλ€λ₯Έ typeλ³μΉμΌλ‘ μ μ©μ΄ κ°λ₯νλ€.
};
const user1: TUser = {
name: 'νκΈΈλ',
age: 20,
};
π¨ λμΌν μ€μ½ν λ΄μμλ λμΌν μ΄λ¦μ νμ
λ³μΉμ μ μΈνλκ²μ λΆκ°λ₯νλ€!
type TUser = {
name: string;
age: number;
};
type TUser = {
// β λμΌν μ΄λ¦μ΄ νμ
μ§μ μ μλλ€.
};
type TUser = {
name: string;
age: number;
};
function Test() {
type TUser = {
// β
μ€μ½νκ° λ€λ₯΄λ©΄ λμΌν μ΄λ¦ μ¬μ© κ°λ₯
name: string;
address: string;
};
const user: TUser = {
name: 'νκΈΈλ',
address: 'μμΈνΉλ³μ',
};
}
π¨ νμ
μ 리ν°λ΄λ‘ μ§μ ν΄λλ€λ©΄?
type TGender = 'female' | 'male';
type TUserPick = {
name: string;
age: number;
gender?: TGender; // ππ» νμ
μ 'female' | 'male' λΌκ³ 리ν°λ΄ λ°©μμΌλ‘ μ§μ
};
const user1 = {
name: 'μ΄λμ',
age: 30,
gender: 'female', // ππ» νμ
μΆλ‘ μ μν΄ νμ
μ string μ§μ
};
const user2: TUserPick = user1; // π¨ genderμ νμ
μ΄ λ§μ§ μμ, error
νμ
λ³μΉμ νμ₯
&
μ°μ°μλ₯Ό μ΄μ©ν νμ₯
type Person = {
name: string;
age: number;
};
type MyWorker = Person & {
// & μ°μ°μλ₯Ό ν΅ν΄ νμ
νμ₯
company: string;
readonly position: string; // ν΄λΉ ν€μλκ° λΆκ²λλ©΄ κ°μ μ½μ΄μ€λ건 λμ§λ§, λ³κ²½νλ건 ν μ μλ€.
getMoney: (amount: number) => number;
};
type Employ = Person & MyWorker; // μλ‘μ΄ νμ
μ μμ±ν΄μ & μ°μ°μλ₯Ό μ¬μ©ν νμ₯λ²
β
μ½κΈ°μ μ© readonly : ν΄λΉ ν€μλκ° λΆμ΄λ©΄ κ°μ μ½λ건, κ°μ²΄μ value κ° λ³κ²½νλ건 ν μ μλ€.
interface Person {
readonly name: string;
age?: number;
}
const person: Person = {
name: 'κΉμ² μ',
// age: 27,
};
person.name = 'νκΈΈλ'; // β
μΈν°νμ΄μ€
νμ
λ³μΉκ³Ό λμΌνκ² νμ
μ μ΄λ¦μ μ§μ΄μ£Όλ λ λ€λ₯Έ λ¬Έλ²
μμνμ
μ μ§μ ν μ μκ³ , κ°μ²΄
νμ
λ§ μ§μ κ°λ₯
interface νμ
μ΄λ¦ {}
νμ
μ μ΄λ¦μ λλ¬Έμλ‘ μ§μ
interface Person {
name: string;
age: number;
}
βοΈ λμΌν μ€μ½ν λ΄μμλ λμΌν μ΄λ¦μ μΈν°νμ΄μ€ μ μΈμ΄ κ°λ₯νλ€!
interface IBox {
width: number;
height: number;
}
interface IBox {
shape: string;
}
const boxModel2: IBox = {
width: 20,
height: 30,
shape: 'λ€λͺ¨',
};
μΈν°νμ΄μ€μ νμ₯
&
μ°μ°μλ₯Ό νμ©ν νμ₯
interface IPerson {
name: string;
age: number;
}
interface IWorker {
company: string;
readonly position: string;
getMoney: (amount: number) => number;
}
const employee: IWorker & IPerson = {
name: 'μ΄λμ',
age: 30,
company: 'google',
position: 'teacher',
getMoney: (amount: number) => {
return amount;
},
};
extends
λ₯Ό μ¬μ©ν νμ₯
interface IUser {
name: string;
age: number;
}
interface IUserAddress extends IUser {
code: string;
address: string;
}
const userAddress: IUserAddress = {
name: 'κΉμ² μ',
age: 20,
code: '13456',
address: 'μμΈνΉλ³μ κ°λ¨κ΅¬',
};
λ€μ€νμ₯
interface IUser {
name: string;
age: number;
}
interface IWorker {
company: string;
readonly position: string;
getMoney: (amount: number) => number;
}
interface IUserAddress extends IUser, IWorker {
// νμ
μ νμ₯ν λ extendsλ₯Ό ν΅ν΄ νμ₯νλ€. ( , λ₯Ό ν΅ν΄ νμ₯ κ°λ₯ )
code: string;
address: string;
}
const userAddress: IUserAddress = {
name: 'κΉμ² μ',
age: 20,
code: '13456',
address: 'μμΈνΉλ³μ κ°λ¨κ΅¬',
company: 'google',
position: 'teacher',
getMoney: (amount: number) => {
return amount;
},
};
νμ
λ³μΉ(Type) vs μΈν°νμ΄μ€(interface)
π€₯ κ°λ°μμ μ·¨ν₯μ λ°λΌ μ¬μ©νλ λ°©μμ΄ λ€λ₯ΌλΏ λκ°μ§μ ν° μ°¨μ΄λ μλ€.
π μ°Έκ³
Last updated