
π ν΅μ¬ κ°λ
βκ°μ²΄ νμ μμ νΉμ κ° νμ λ§ κΊΌλ΄μ°κΈ°β
π μμ (μ½κ² λ°κΏμ μ€λͺ )
interface User {
name: string;
age: number;
address: {
city: string;
zip: number;
};
}
type UserName = User['name']; // string
type UserAddress = User['address']; // { city: string; zip: number }
type UserCity = User['address']['city']; // string
π ν΄μ
function printUser(user: User['address']) {
console.log(user.city);
}
π μλ―Έ
β μλͺ»λ μκ°
User[name] // β (λ¬Έμμ΄ μλ)
β μ¬λ°λ₯Έ λ°©λ²
User['name'] // βοΈ λ¬Έμμ΄λ‘ μ¨μΌ ν¨
π ν΅μ¬
λ°°μ΄ μ "μμ νλμ νμ " κΊΌλ΄κΈ°
π μμ
type ProductList = {
name: string;
price: number;
}[];
type Product = ProductList[number];
π ν΄μ
βλ°°μ΄ μμ μλ μμ νμ νλ
function printProduct(product: ProductList[number]) {
console.log(product.name);
}
type MyTuple = [number, string, boolean];
type A = MyTuple[0]; // number
type B = MyTuple[1]; // string
type All = MyTuple[number];
// number | string | boolean
π μλ―Έ
βνν μμ λ€μ΄μλ λͺ¨λ νμ ν©μΉκΈ°β
π ν΅μ¬
βκ°μ²΄μ keyλ§ λ½μμ νμ μΌλ‘ λ§λ€κΈ°β
π μμ
interface Person {
name: string;
age: number;
}
type Keys = keyof Person;
// "name" | "age"
function getValue(obj: Person, key: keyof Person) {
return obj[key];
}
π μλ―Έ
β
keyof person // β (κ°μ΄λΌμ μλ¨)
β
keyof Person // βοΈ νμ
λ§ κ°λ₯
π‘ typeofμ κ°μ΄ μ°κΈ°
const person = {
name: 'λ―Όμ§',
age: 20,
};
type PersonType = typeof person;
function getValue(obj: PersonType, key: keyof typeof person) {
return obj[key];
}
π ν΅μ¬
βκΈ°μ‘΄ νμ μ κΈ°λ°μΌλ‘ μλ‘μ΄ νμ λ§λ€κΈ°β
π μμ
interface User {
id: number;
name: string;
age: number;
}
β λͺ¨λ κ°μ booleanμΌλ‘ λ°κΎΈκΈ°
type BooleanUser = {
[key in keyof User]: boolean;
};
π κ²°κ³Ό
{
id: boolean;
name: boolean;
age: boolean;
}
type ReadonlyUser = {
readonly [key in keyof User]: User[key];
};
π μμ λΆκ°λ₯
π‘ μ€μ μ¬μ© μ΄μ
function fetchUser(): ReadonlyUser {
return {
id: 1,
name: 'λ―Όμ§',
age: 20,
};
}
π λ°μ΄ν°λ₯Ό 보νΈνκΈ° μν΄ μ¬μ©
(μ€λ¬΄μμ λ§μ΄ μπ₯)
type PartialUser = {
[key in keyof User]?: User[key];
};
π κ²°κ³Ό
{
id?: number;
name?: string;
age?: number;
}
π ν΅μ¬
βλ¬Έμμ΄ ν¨ν΄ λ§λ€κΈ°β
π μμ
type Fruit = 'apple' | 'banana';
type Color = 'red' | 'yellow';
type FruitColor = `${Color}-${Fruit}`;
π κ²°κ³Ό
"red-apple"
"red-banana"
"yellow-apple"
"yellow-banana"
π₯ ν΅μ¬ μμ½
| κ°λ
| νμ€ μμ½ |
| ---------- | ----------- |
| μΈλ±μ€ νμ
| κ°μ²΄μμ νμ
κΊΌλ΄κΈ° |
| λ°°μ΄[number] | μμ νμ
κΊΌλ΄κΈ° |
| keyof | keyλ§ λ½κΈ° |
| mapped | νμ
λ³ν |
| ν
νλ¦Ώ νμ
| λ¬Έμμ΄ μ‘°ν© |
π νμ
μ‘°μμ
"μ΄λ―Έ μλ νμ
μ κΊΌλ΄κ³ , λ°κΎΈκ³ , μ‘°ν©νλ κΈ°μ "