์ธํฐ์น์
ํ์
์ ์ด์ฉํด โ์ฌ๋ฌ ๊ฒฝ์ฐ์ ๋ชจ๋ ํด๋นโํ๋ ํ์
์ ํํํ ์ ์๋ค
๋๊ธฐ๋ถ์ฌ
์๋ฅผ ๋ค์ด, ํ๋ก๊ทธ๋๋จธ๋ฅผ ๋ํ๋ด๋ ํ์
๊ณผ ๊ฐ์ ๋ค์๊ณผ ๊ฐ์ด ์ ์ํ๋ค๊ณ ํ์.
type Programmer = { favoriteLanguage: string }; const programmer: Programmer = { favoriteLanguage: 'TypeScript' };
๊ทธ๋ฆฌ๊ณ ๋งฅ์ฃผ๋ฅผ ์ข์ํ๋ ์ฌ๋์ ํ์
๊ณผ ๊ฐ์ ๋ค์๊ณผ ๊ฐ์ด ์ ์ํ๋ค.
type BeerLover = { favoriteBeer: string }; const beerLover: BeerLover = { favoriteBeer: 'Imperial Stout' };
๊ทธ๋ ๋ค๋ฉด, ๋งฅ์ฃผ๋ฅผ ์ข์ํ๋ ํ๋ก๊ทธ๋๋จธ์ ํ์
์ ์ด๋ป๊ฒ ๋ํ๋ผ ์ ์์๊น? ๋ฌผ๋ก ๋ชจ๋ ํ๋๋ฅผ ๋ค ์ ์ด ์๋ก์ด ํ์
์ ์ ์ํ๋ ์์ ๋จ์ํ ์ ๊ทผ๋ ๊ฐ๋ฅํ๋ค.
type BeerLovingProgrammer = { favoriteLanguage: string; favoriteBeer: string; }; const AhnHeejong: BeerLovingProgrammer = { favoriteLanguage: 'TypeScript', favoriteBeer: 'Imperial Stout', };
ํ์ง๋ง ์ด๋ฐ ์ ๊ทผ์ ์ฝ๋ ๋ณต์ฌโ๋ถ์ฌ๋ฃ๊ธฐ์ ๋์ผํ๊ฒ ๋ณํ์ ์ทจ์ฝํ๋ค๋ ๋จ์ ์ ๊ฐ๋๋ค.
์๋ฅผ ๋ค์ด ์ถํ Programmer ํ์
์ ๋ฌธ์์ด ํ์
textEditor ์์ฑ์ด ์ถ๊ฐ๋๋ค๋ฉด, ํ๋ก๊ทธ๋๋จธ๋ฅผ ๋ํ๋ด๋ ๋ชจ๋ ํ์
์ ์ฐพ์ ํด๋น ์์ฑ์ ์ถ๊ฐํด์ผ ํ๋ค.
๊ท์ฐฎ์ ๊ฒ์ ์ฐจ์นํ๋๋ผ๋, ์ด ๊ณผ์ ์์ ์ด๋์ธ๊ฐ ๋นผ๋จน์ ๊ฐ๋ฅ์ฑ์ด ๋๋ค.
์ด๋ฐ ๋นํจ์จ์ ํผํ๊ณ ๋ณํ์ ์ ์ฐํ๊ฒ ๋์ํ๊ธฐ ์ํด์ ์ด๋ฏธ ์กด์ฌํ๋ ์ฌ๋ฌ ํ์
์ ๋ชจ๋ ๋ง์กฑํ๋ ํ์
์ ํํํ๊ธฐ ์ํ ์๋จ์ด ํ์ํ๋ค.
์ธํฐ์น์
ํ์
์ ๋ฐ๋ก ๊ทธ๊ฑธ ๊ฐ๋ฅ์ผ ํ๋ค.
๋ฌธ๋ฒ
์ฌ๋ฌ ํ์
์ ์ฐํผ์๋(&) ๊ธฐํธ๋ก ์ด์ด์ ์ธํฐ์น์
ํ์
์ ๋ํ๋ผ ์ ์๋ค.
type BeerLovingProgrammer = Programmar & BeerLover;
A & B ํ์
์ ๊ฐ์ A ํ์
์๋, B ํ์
์๋ ํ ๋น ๊ฐ๋ฅํด์ผ ํ๋ค.
๋ง์ฝ A์ B ๋ชจ๋ ๊ฐ์ฒด ํ์
์ด๋ผ๋ฉด A & B ํ์
์ ๊ฐ์ฒด๋ A์ B ํ์
๊ฐ๊ฐ์ ์ ์๋ ์์ฑ ๋ชจ๋๋ฅผ ๊ฐ์ ธ์ผ ํ๋ค.
type Infeasible = string & number
๋ฌธ์์ด์ธ ๋์์ ์ซ์์ธ ๊ฐ์ ์กด์ฌํ์ง ์์ผ๋ฏ๋ก, ์
Infeasible
ํ์
์ ์ค์ ๋ก๋ ์ด๋ค ๊ฐ๋ ๊ฐ์ง ์ ์๋ค.์ธํฐ์น์
ํ์
์ญ์ ๋ช ๊ฐ๋ ์ด์ด๊ฐ๋ฉฐ ์ ์ํ ์ ์๋ค.
type Awesome = Programmer & BeerLover & CatLover;
์ฌ๋ฌ ์ค์ ๊ฑธ์ณ ์ ์ ์ธํฐ์น์ ํ์
์ธํฐ์น์
ํ์
์ ์ฌ๋ฌ ์ค์ ๊ฑธ์ณ ์ ์ ๋ ์ ๋์จ ํ์
์ ๊ทธ๊ฒ๊ณผ ๋์ผํ ๋ด์ฉ์ด ์ ์ฉ๋๋ค. ์๋ ๋ ๋ฐฉ์์ผ๋ก ์ ์ํ ์ ์๋ค.
type BeerLovingProgrammer = Programmer & BeerLover; type BeerLovingProgrammer2 = & Programmer & BeerLover;