ํ์ ์คํฌ๋ฆฝํธ_๋ ผ๋ฆฌ์ฐ์ฐ์ํ์ฉ
๐์ฃผ์ : ๋ ผ๋ฆฌ ์ฐ์ฐ์ ํ์ฉ ํ์
1. ํ์ ๋ณ์นญ (Type Aliases)
- ์๋ฏธ์๋ ๋ฐ๋ณต์ ์ค์ด๊ณ ํ์ ์ ๋ช ์์ ์ผ๋ก ์ฌ์ฉํ๋๋ก ๋๋๋ค.
- let, const๋ฅผ ์ ์ธํด ๋ณ์๋ฅผ ์ด๊ธฐํ ํ๋ฏ์ด ์ฌ์ฉํ ์ ์๋ค.
- ์ปดํ์ผ๋ฌ๊ฐ ๋ฐ๋ก ์ถ๋ก ํ์ง ์๋๋ค.
// ํ์
๋ณ์นญ ์ค์
type str = string;
type num = number;
type numArr = num[];
type strArr = string[];
// ๋ณ์นญ ์ฌ์ฉ!
type Person = {
name: str;
age: num;
family: strArr;
}
interface๋ type aliases์ ๋ค๋ฅด๊ฒ ํ ์ค ์๋ ๊ฒ์ด ๋ง๋ค! (์ถ๋ก ๋ ๊ณ์ ํ๊ณ , ๊ตฌ์กฐํ ํ๊ธฐ์ ์ข์.)
MS์์๋ ์ด๋ฐ type aliases ๋ฅผ ์ํด ์ฌ๋ฌ๊ฐ์ง ๊ธฐ๋ฅ๋ค์ ์ถ๊ฐ ์ค์ ์๋ค๊ณ ํ๋ค.
1-1. ์ ๋์ธ ํ์
์ง์ง ๋ง์ด ์ฌ์ฉํ๋ ํ์ ์ด๋ค.
์๊น๋ ๊ณ์ ์ผ์ ์ ๋๋ค..ใทใท
ํฉ์งํฉ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
type StringNumber = string | number;
const str: StringNumber = 'STR';
const num:StringNumber = 123;
์ด๋ ๊ฒ๋ ์ฌ์ฉ ๊ฐ๋ฅ!
type Gender = 'M' | 'F';
1-2. ๊ต์ฐจ ํ์ (Intersection)
๊ต์ฐจํ์ ์ ๊ต์งํฉ์ด๋ค.
์ฐ๊ฒฐ๋ ํ์ ๋ชจ๋ ๋ง์กฑํด์ผํ๋ค๋ ๋ป!
ํ์ง๋ง, ์ ์ฐ์ด์ง๋ ์๋๋ค.
type StringNumber = string & number;
const str: StringNumber = 'STR';
// Error: Type 'string' is not assignable to type 'never'.
const num:StringNumber = 123;
// Error: Type 'number' is not assignable to type 'never'.
์ค๋ฅ๊ฐ ๋๋ค. string ํ์ ์ด๋ฉด์ number ํ์ ์กฐ๊ฑด์ ๋ง์ง ์๊ธฐ ๋๋ฌธ์..
type Person = {
name: string;
age: number;
}
type Student = {
name: string;
id: number;
}
const person1: Person & Student = {
name: 'kkan',
age: 22,
id: 123123
}
์ด๋ ๊ฒ Person๊ณผ Student ๋ชจ๋ ๋ง์กฑํด์ผ OK!
1-3. ์ ๋์ธ ํ์ ํ๋ณ
์ถ๋ก ํ๊ธฐ ์ด๋ ค์ด ์ ๋์จ ํ์ ์ ์ถ๋ก ํ๊ธฐ ์ํจ์ด๋ค.
interface Male {
name: string;
age: number;
gender: 'M'
}
interface Female {
name: string;
age: number;
gender: 'F'
}
// ๋๊ตฐ๊ฐ ํฉ์ณ๋์ ์ ๋์จ ํ์
..
type Person = Male | Female;
function createPerson({name, age, gender}: Person) {
return {
name, age, gender
};
}
function createMale({name, age, gender}: Person): Male {
return {
name, age, gender
};
}
// Error: Type '"M" | "F"' is not assignable to type '"M"'.
// Type '"F"' is not assignable to type '"M"'.
ํ์ฌ ์ฝ๋๋ฅผ ์ดํด๋ณด๋ฉด ์ ๋์จ ํ์ ์ผ๋ก ์ธํด ์ถ๊ฐ์ ์ธ ์์ ์ ๋ ํด์ผํ๋ ์ํฉ์ด๋ค.
๋๋ฌธ์ ๋ฌด๋ถ๋ณํ ์ ๋์จ ํ์ ์ฌ์ฉ์ผ๋ก ์ธํด (ํน์ ๋ถํ์ํ ํ์ ์ฌ์ฉ) ๋ถํธํ ์์ ๋ค์ ๋ ํ์ง ์๋๋ก ํ๋ค.
End.