typescriptλ₯Ό μ΄μ©ν΄ κ°λ°νλ€λ³΄λ©΄ νμ κ³ λ―Όνκ² λλ λΆλΆμ΄ μλ€. λ°λ‘ typeκ³Ό interfaceμ€ μ΄λκ²μ μ¬μ©ν΄μ νμ
μ μ μν΄μ€κΉ λΌλ λ¬Έμ μ΄λ€.
μ°μ λκ°μ§ λͺ¨λ λΉμ·ν λ°©μμΌλ‘ λμνλ€. μ¬μ©μκ° νμ
μ μ μΈνκ³ κ·Έ μ΄λ¦μ μ§μ΄μ£Όλ κ²μ΄ 곡ν΅μ μΈ κΈ°λ₯μ΄λ€.
interface Student {
name: string;
grade: number;
hobby: string;
};
type Student = {
name: string;
grade: number;
hobby: string;
};κ·Έλ¦¬κ³ λ λͺ¨λ νμ₯μ΄ κ°λ₯νλ€. typeμ κ²½μ° & μ°μ°μλ₯Ό μ¬μ©νκ³ , interfaceλ extendsλ₯Ό μ¬μ©ν΄ νμ₯μν¬ μ μλ€. κ°μ μ’
λ₯λ€ λΏλ§ μλλΌ λμ μλ‘μλ‘ &μ extendsλ₯Ό μ¬μ©ν΄ νμ₯μ΄ κ°λ₯νλ€.
interface School extends Student {
teacher: string;
study: string;
};
type School = {
teacher: string;
study: string;
} & Student;κ·ΈλΌ μ΄μ μ°¨μ΄μ μ 보λλ‘ νμ.
첫λ²μ§Έλ‘ typeμ primitive, union, tupleμ μ μν μ μμ§λ§ interfaceμ κ²½μ° λΆκ°λ₯νλ€.
type Something = number; // primitive type
type StringOrNumber = string | number; // union type
type Grade = [number, number]; // tupleλλ²μ§Έλ‘ interfaceμ κ²½μ° κ°μ λͺ
μΉμ μ¬μ©νμμλ μλμΌλ‘ mergedλμ§λ§(Declaration Merging) typeμ κ·Έλ μ§ μλ€. (μ΄κ²μ λλ μ νν μμ§ λͺ»νλ λΆλΆμ΄λ€)
interface User {
name: string;
};
interface User {
id: number;
};
const new_user: User = {
id: 1234,
name: 'Sam'
};
// new_user.id; >> 1234
// new_user.name >> Samtype User = {
name: string;
};
type User = { // >> Duplicate identifier 'User' (ts2300)
id: number;
};λ§μ§λ§μΌλ‘ type, interfaceμ λν λͺκ°μ§ μ¬μ© μλ리μ€λ₯Ό 보면 λ€μκ³Ό κ°μ κ²μ΄λ€.
type
primitive typeμ λν νμ μ μtuple typeμ λν νμ μ μfunction typeμ λν νμ μ μunion typeμ λν νμ μ μmapped typeμ λν νμ μ μ
interface
declaration mergeκΈ°λ₯μ νμ©ν΄μΌ ν λ (λ³΄ν΅ μΈλΆμ 곡κ°νapiλinterfaceλ₯Ό μ¬μ©ν΄ νμ₯μ±μ λμΈλ€)- κ°μ²΄λ₯Ό μ μνκ±°λ
typeμ μ¬μ©ν νμκ° μμλ
Typescriptνμ κ°λ₯ν interfaceλ₯Ό μ¬μ©νκ³ , unionλλ tupleμ λν μ μκ° νμν λλ typeμ μ¬μ©νλλ‘ κΆμ₯νκ³ μλ€. νμ§λ§ νλ‘μ νΈμ κ°λ° 컨벀μ
μ λ°λΌ μ μ νκ² μ¬μ©νλ©΄ νΉλ³ν μΌμ΄μ€κ° μλ μ΄μ ν¬κ² λ¬Έμ λ κ²μ μλ€κ³ μκ°νλ€.
- https://www.typescriptlang.org/docs/handbook/2/everyday-types.html#differences-between-type-aliases-and-interfaces