νμ μ€ν¬λ¦½νΈ μ½λμμ νΉμ νμ μ΄ λ€λ₯Έ νμ μ μ λ§λμ§λ₯Ό μλ―Έν©λλ€.
β ꡬ쑰μ νμ΄ν μμ
- ꡬ쑰μ νμ΄ν(structural typing)μ΄λ μ½λ ꡬ쑰 κ΄μ μμ νμ μ΄ μλ‘ νΈνλλμ§μ μ¬λΆλ₯Ό νλ¨νλ κ²μ λλ€.
β μΈν°νμ΄μ€
interface Developer{
name: string;
skill: string;
}
interface Person{
name: string;
}
let developer: Developer;
let person: Person;
developer = person; // μλ¬μ΄μ : μΌμͺ½μ μλ λ³μκ° λ ν° κ΄κ³λ₯Ό κ°μ§κ³ μμ΄μ
person = developer; // μλ¬κ° μλ¬λ€.
- μ€λ₯Έμͺ½μ μλ νμ μ΄ λ λ§μ μμ±μ κ°μ§κ±°λ, ꡬ쑰μ μΌλ‘ λ μ»Έμ λ μΌμͺ½κ³Ό νΈνμ΄ λ©λλ€.
β μΈν°νμ΄μ€μ ν΄λμ€
interface Developer{
name: string;
skill: string;
}
class Person{
name: string;
}
let developer: Developer;
developer = new Person(); // μλ¬ λ°μ
- μΈν°νμ΄μ€λ ν΄λμ€, νμ λ³μΉ κ³Ό κ°μ κ²μΌλ‘ νμΈνμ§ μκ³
- λ΄λΆμ μΌλ‘ μ‘΄μ¬νκ³ μλ μμ±κ³Ό ν°μ μ λν μ μλ€μ λν΄ λΉκ΅λ₯Ό ν©λλ€.
β ν¨μ λΉκ΅
let add = function(a: number){
// ...
}
let sum = function(a: number, b: number){
// ...
}
add = sum; // μλ¬
sum = add // κ°λ₯
- μμ ν¨μμ μ°¨μ΄λ ν리미ν°μ κ°μ, ꡬ쑰μ μΌλ‘λ
sum
μ΄add
λ³΄λ€ ν½λλ€.
β μ λ€λ¦ λΉκ΅
1.
interface Empty<T> {
// ...
}
let empty1: Empty<string>;
let empty2: Empty<number>;
// μλ λͺ¨λ νΈν κ°λ₯
empty1 = empty2;
empty2 = empty1;
- μ μΈν°νμ΄μ€λ μΌλ¨ μμ±μ΄ μκΈ° λλ¬Έμ κ°μ νμ μΌλ‘ κ°μ£Όλ©λλ€.
2.
interface NotEmpty<T> {
date: T;
}
let notempty1: NotEmpty<string>;
let notempty2: NotEmpty<number>;
// λͺ¨λ νΈν λΆκ°λ₯
// λμΌν μμ±μ κ°μ§μ§λ§ νμ
μ μ°¨μ΄κ° λ°μνλ€.
notempty1 = notempty2;
notempty2 = notempty1;
- μΈν°νμ΄μ€ NotEmptyμ λκΈ΄ μ λ€λ¦ νμ μ΄ data μμ±μ ν λΉ λμμΌλ―λ‘ μλ‘ λ€λ₯Έ νμ μΌλ‘ κ°μ£Όλ©λλ€.
μ°Έκ³
'π Front-End > TypeScript' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
νμ μ€ν¬λ¦½νΈμ λͺ¨λ (0) | 2022.10.23 |
---|---|
νμ κ°λ(Type Guard) (0) | 2022.10.23 |
νμ λ¨μΈ(Type Assertion) (0) | 2022.10.23 |
νμ μΆλ‘ (Type Inference) (0) | 2022.10.23 |
μ λ€λ¦(Generics) (0) | 2022.10.23 |