κ°μ²΄ νμ
π κ°μ²΄ νμ
κ°μ²΄ νμ
μ΄λ νμ
μ€ν¬λ¦½νΈμμ {μμ±λͺ
: νμ
λͺ
}
νμμΌλ‘ μ΄λ£¨μ΄μ§ νμ
μ
λλ€.
type Poet = {
// λ³μΉ κ°μ²΄ νμ
born: number;
name: string;
};
let poetLater: Poet;
poetLater = {
born: 1935,
name: "Mary Oliver",
};
poetLater = "Sappho";
// Error: Type 'string' is not assignable to type '{born: numner; name: string;}
π ꡬ쑰μ νμ΄ν
ꡬ쑰μ νμ΄νμ μ€μ ꡬ쑰μ μ μμ μν΄ κ²°μ λλ νμ μμ€ν μ λλ€.
λ°νμμ νμ μ κ²°μ νλ μλ°μ€ν¬λ¦½νΈμ λ νμ΄νκ³Ό λ¬λ¦¬, νμ μ€ν¬λ¦½νΈλ ꡬ쑰μ μΌλ‘ νμ νν©λλ€.
λ νμ΄νμ΄λ? λμ νμ΄νμ ν μ’ λ₯λ‘ κ°μ²΄μ λ³μ λ° λ©μλμ μ§ν©μ΄ κ°μ²΄μ νμ μ κ²°μ νλ κ²
βͺ μ΄κ³Ό μμ± κ²μ¬
μ΄κ³Ό μμ± κ²μ¬λ κ°μ²΄ νμ μμ±μ κ²μ¬νλ κ³Όμ μ λλ€.
μ΄κ³Ό μμ± κ²μ¬μλ μ€μν μ‘°κ±΄μ΄ μμ΅λλ€.
βκ°μ²΄ 리ν°λ΄μ λ³μμ μ§μ ν λΉνλ κ²½μ°μλ§βμ΄κ³Ό μμ± κ²μ¬κ° μ§νλλ€λ κ²μ λλ€.
λ€μκ³Ό κ°μ μμμμλ κ°μ²΄ 리ν°λ΄ Poet
μ λ³μ extraPerson
μ μ§μ ν λΉνκΈ° λλ¬Έμ μ΄κ³Ό μμ± κ²μ¬κ° μ§νλμ΄ νμ
μλ¬λ₯Ό λ±μ΅λλ€.
type Person = {
name: string,
age: number,
};
// ok. Personνλμ μΌμΉ
const Sujin: Person = {
name: "sujin",
age: 28,
};
const extraPerson: Person = {
name: "sujin",
age: 28,
nickName: "masuri", // Error!
};
μ΄λ²μλ μ€κ°μ λ³μλ₯Ό κ±°μ³μ κ°μ²΄λ¦¬ν°λ΄λ₯Ό λμ ν΄λ³΄κ² μ΅λλ€.
const exisitingObject = {
name: "sujin",
age: 28,
nickName: "masuri",
};
const extraPerson: Person = existingObject; // ok
κ°μ²΄λ₯Ό λ€λ₯Έ λ³μμ ν λΉνλλ, λ³μ existingObject
λ μ΄κ³Ό μμ± κ²μ¬λ₯Ό λ°μ§ μμκΈ° λλ¬Έμ μλ¬κ° λ°μνμ§ μμ΅λλ€.
βͺ μ νμ μμ±
μ νμ μμ±μ μλν
μ΄μ
(:
)μμ ?
λ₯Ό μΆκ°ν΄μ μ νμ μΌλ‘ μμ±μ νμ©ν λ μ¬μ©ν©λλ€.
νμ
μ undefined
λ‘ μ μΈνκ²½μ°, κ·Έ κ°μ΄ undefined
μΌμ§λΌλ λ°λμ κ·Έ κ°μ΄ μ‘΄μ¬ν΄μΌν©λλ€.
λ°λ©΄, μ νμ μΌλ‘ μ μΈλ μμ±μ μ‘΄μ¬νμ§ μμλ λ©λλ€.
type Writer = {
author: string | undefined;
editor?: string;
};
const hasRequired: Writer = {
author: undefined;
}
const missingRequired: Writer = {};
// Error: Property 'author' is missing in type '{}' but required in type 'Writers'.
π κ΅μ°¨ νμ
κ΅μ°¨ νμ μ ν©μ§ν©μ κ°λ μΌλ‘ μ΄ν΄ν μ μμ΅λλ€.
μ λμΈ νμ μ΄ μ΄κ±° λλ μ κ±°μ κ°λ μΌλ‘ μ£Όμ΄μ§ νμ μ€ νλμ νμ λ§ μ ννκ² λλ λ°λ©΄μ,
κ΅μ°¨ νμ μ μλ‘ λ€λ₯Έ νμ μ΄ νλμ νμ μΌλ‘ λ§λ€μ΄μ Έ μ¬λ¬ νμ μ λμμ λνλΌ μ μμ΅λλ€.
κ΅μ°¨ νμ μ μ λμΈ νμ κ³Ό κ²°ν©νμ¬ μ¬μ©ν μ μμ΅λλ€.
type ShortPoem = {
author: string;
} & ({ kigo: string; type: "haiku" } | { meter: number; type: "villanelle" });
// type:
// {author: string; kigo: string; type: "haiku"}
// λλ
// {author: string; meter: number; type: "villanelle" }
βͺ never
μμνμ μ κ΅μ°¨νμ μ μ μ©νλ κ²μ 무μλ―Έν μΌμ λλ€.
μμνμ μ κ΅μ°¨νμ μ μ μ©νλ©΄ neverλΌλ νμ μ΄ λλλ°, μ΄λ λΉμ΄μλ νμ μ λ»ν©λλ€.
let notNumber: number & string = 0;
// Error: Type 'number'is not assignable to type 'never'
μ°Έκ³
- learning TypeScript
- InPa-Dev - νμ μ€ν¬λ¦½νΈ μμ¬ μμ± κ²μ¬ μ리 μ΄ν΄νκΈ°
π¬ μ΅μ λκΈ