...

νμ μ€ν¬λ¦½νΈ κ°μ²΄ νμ 체νΉ
νμ μ€ν¬λ¦½νΈλ κ°μ²΄ νμ μ μ μΈν λ μ’ λ μλ°ν μμ± κ²μ¬λ₯Ό μ§ννκ² λλ€.
μλ₯Ό λ€μ΄ λ€μ Avangers λΌλ μΈν°νμ΄μ€ νμ μ΄ μλ€κ³ νμ.
μ¬κΈ°μλ name ν€ μμ± νλλ§ μ μλμ΄ μλ€.
μ΄ μΈν°νμ΄μ€λ₯Ό hero λ³μ νμ μΌλ‘ μ μνκ³ κ°μ²΄κ°μ λμ νμλ€. κ·Έλ°λ° name ν€ μΈμ location ν€λ κ°μ΄ λ£μλλ μ€λ₯κ° λ¬λ€.
interface Avengers {
name: string;
}
let hero: Avengers;
hero = { name: 'Captain', location: 'Pangyo' }; // Error - '{ name: string; location: string; }' νμμ 'Avengers' νμμ ν λΉν μ μμ΅λλ€. κ°μ²΄ 리ν°λ΄μ μλ €μ§ μμ±λ§ μ§μ ν μ μμΌλ©° 'Avengers' νμμ 'location'μ΄(κ°) μμ΅λλ€
λΉμ°νκ²λ μ μΈλ κ°μ²΄ νμ ꡬ쑰μ λ§μ§ μμΌλ μλ¬κ° λ¨κ² λκ³ κ° λμ μ΄ λΆκ°λ₯νκ² λλ€.
κ·Έλ°λ° μ΄λ²μλ { name: 'Captain', location: 'Pangyo' } κ°μ²΄ κ°μ λ°λ‘ hero λ³μμ λμ
νμ§λ§κ³ , μ€κ°μ tmp λ³μμ λμ
νλ€, tmp λ³μλ₯Ό hero λ³μμ λμ
ν΄λ³΄μ.
interface Avengers {
name: string;
}
/*
// νμ
λ³μΉμΌλ‘ ν΄λ λ§μ°¬κ°μ§ μ΄λ€.
type Avengers = {
name: string;
};
// 리ν°λ΄ κ°μ²΄ νμ
μΌλ‘ ν΄λ λ§μ°¬κ°μ§ μ΄λ€.
let hero: {
name: string;
};
*/
let hero: Avengers;
// hero = { name: 'Captain', location: 'Pangyo' };
let tmp = { name: 'Captain', location: 'Pangyo' };
hero = tmp; // μ ν λ¬Έμ μμ΄ λμ
λλ€.
console.log(hero); // { name: 'Captain', location: 'Pangyo' }
μ§μ λμ ν λλ μλ¬λΌλ©΄μ μ€κ°μ λ³μλ₯Ό κ±°μ³μ λμ νλ©΄ μλ¬κ° μλλλ€.
λ체 κ°λμκΈ°λ μΈκ³ κ° μ΄ ν΄κ΄΄ν νμμ λ¬΄μ¨ μλ¦¬λ‘ νλ¨ λλ κ²μΌκΉ?
μ΄κ³Ό νλ‘νΌν° κ²μ¬ (Excess Property Checks)
κ°μ²΄ νμ μμ±μ κ²μ¬νλ κ²μ μ’λ μ λ¬Έ μ©μ΄λ‘ νννμλ©΄ μ΄κ³Ό νλ‘νΌν° κ²μ¬ λΌκ³ νλ€.
λ€μκ³Ό κ°μ΄ κ°μ²΄ 리ν°λ΄μ λ³μμ μ§μ ν λΉν λλ μΈμλ‘ μ λ¬ν λ, μ΄κ³Ό νλ‘νΌν° κ²μ¬ (excess property checking)λ₯Ό λ°κ² λλ€. κ·Έλμ λ§μ½ κ°μ²΄ 리ν°λ΄μ΄ "λμ νμ (target type)"μ΄ κ°κ³ μμ§ μμ νλ‘νΌν°λ₯Ό κ°κ³ μμΌλ©΄, λΉμ°νκ²λ μλ¬κ° λ°μλλ€.

κ·Έλ¬λ κ°μ²΄λ₯Ό λ€λ₯Έ λ³μμ ν λΉνκ² λλ©΄, λ³μ tmp λ μ΄κ³Ό νλ‘νΌν° κ²μ¬λ₯Ό λ°μ§ μκΈ° λλ¬Έμ, μ»΄νμΌλ¬λ μλ¬λ₯Ό μ£Όμ§ μλ κ²μ΄λ€.

κ·Έλ λ€κ³ ν΄μ λ€μκ³Ό κ°μ΄ μΈν°νμ΄μ€μ μ μλ κ³΅ν΅ κ°μ²΄ νλ‘νΌν°κ° μμΌλ©΄ μ΄κ³Ό νλ‘νΌν° κ²μ¬ ννΌλ λλ 무쑰건 μλ¬κ° λ°μλλ€.

μΆκ°λ‘ μ΄ μ΄κ³Ό νλ‘νΌν° κ²μ¬λ₯Ό νΌν λ°©λ²μ λ°λ‘ λ€μμ λ°°μΈ νμ λ¨μΈ λ°©λ²μ μ¨λ κ°λ₯νλ€.

νμ§λ§ νΉλ³ν κ²½μ°μ, μΆκ° νλ‘νΌν°κ° μμμ νμ νλ€λ©΄, λ°λ‘ μΈν°νμ΄μ€ κΈ°λ₯μΈ λ¬Έμμ΄ μΈλ±μ€ μλͺ (string index signatuer)μ μΆκ°νλ κ²μ΄ λ λμ λ°©λ²μΌ μλ μλ€.
interface Avengers {
name: string;
[propName: string]: any;
}
μ 리νμλ©΄ μ΄ μ΄κ³Ό νλ‘νΌν° κ²μ¬λ μ λ§νλ©΄ "νΌνλ" λ°©λ²μ μλνμ§ μλ κ²μ΄ μ’μ κ²μ΄λ€.
νμ§λ§ λ©μλκ° μκ³ μνλ₯Ό κ°μ§λ λ± λ 볡μ‘ν κ°μ²΄ 리ν°λ΄μμ μ΄ κ²μ¬ ννΌ λ°©λ²μ μκΈ΄νκ² μ¬μ©μ΄ κ°λ₯νκΈ΄ νλ€.
κ·Έλ¬λ μ΄κ³Ό νλ‘νΌν° μλ¬μ λλΆλΆμ μ€μ λ²κ·Έμ΄κΈ° λλ¬Έμ, λ§μ½ μ΄κ³Ό νλ‘νΌν° κ²μ¬ λ¬Έμ κ° λ°μνλ©΄, κ·Έλ₯ νμ μ μλ₯Ό μμ ν΄μΌ ν νμκ° μλ€.
# μ°Έκ³ μλ£
https://typescript-kr.github.io/pages/interfaces.html
μ½κ² μμνλ νμ μ€ν¬λ¦½νΈ (κΈΈλ², 2023, μΊ‘ν΄νκ΅ μ§μ)
μ΄ κΈμ΄ μ’μΌμ ¨λ€λ©΄ ꡬλ & μ’μμ
μ¬λ¬λΆμ ꡬλ
κ³Ό μ’μμλ
μ μμκ² ν° νμ΄ λ©λλ€.