๐ฅ ํ๋ง์ค ๋ฌ๋ฒ๋ 1์ผ์ฐจ
๐ TypeScript์ JavaScript ๊ด๊ณ
๋ชจ๋ JavaScript๋ TypeScript์ด์ง๋ง,
1 | interface State { |
์ ์์๋ฅผ ์ค๋ช
ํ๋ฉด, ์์ ๋งํ ๋ชจ๋ ํ์
์คํฌ๋ฆฝํธ๊ฐ ์๋ฐ์คํฌ๋ฆฝํธ๋ค
์ฐ๋ฆฌ๋ ํ์ ์ ๋ง๋๋ก ์์ฑํ๊ธฐ ์ํด ํ์ ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ๋ ค๋ ๊ฒ์ด๋ฏ๋ก ํ์ ์ ๋ง๊ฒ ์ฝ๋๋ฅผ ์์ฑํ ๋๋ง ์ง์ ํ์ ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ์์ฑํ๋ค๊ณ ๋งํ ์ ์๋ค.
๐ ์ฝ๋ ์์ฑ๊ณผ ํ์ ์ ๊ด๋ จ์ด ์๋ค.
TypeScript๋ก ์์ฑํ ์ฝ๋๊ฐ ์ปดํ์ผ ๊ณผ์ ์ ํตํด JavaScript๋ก ๋ณํ๋๋ค.
์ด ๋, ํ์ ์ฝ๋๋ค์ ์ฌ๋ผ์ง๊ฒ๋๋ค.
1 | // TypeScript |
์ ์ฝ๋๋ฅผ JavaScript๋ก ์ปดํ์ผํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๋ง ๋จ๋๋ค.
1 | // JavaScript |
์ปดํ์ผ ์ดํ ๋ฐํ์ ์์ ์ JavaScript ์ฝ๋๊ฐ ์คํ๋๋ค.
์ฆ, ์ปดํ์ผ์ด ์ฝ๋ ์์ฑ์ ๋งํ๋ ๊ฒ์ด๊ณ ๋ฐํ์ ์์ ์๋ ํ์ ์ ์ฒดํฌํ ์ ์์ ๋ฟ๋๋ฌ ๋น์ฐํ ํ์ ์คํฌ๋ฆฝํธ ํ์ ์ ๋ฐํ์ ์ฑ๋ฅ์ ์ํฅ์ ์ฃผ์ง ์์ต๋๋ค.
๐ any ํ์ ์ง์ํ๊ธฐ
- any ํ์ ์ ์์ ์ฑ์ด ์๋ค.
- ํจ์ ์๊ทธ๋์ฒ(contract: ๊ณ์ฝ)์ ๋ฌด์ํ๋ค.
1 | function calcAge(birthDate: Date): number { |
- ์ธ์ด ์๋น์ค๊ฐ ์ ์ฉ๋์ง ์๋๋ค.(์๋์์ฑ ๋ฐ ๋์๋ง)
- ์ฝ๋ ์ค๊ณ๋ฅผ ์์ธกํ ์ ์๊ฒ ๋ง๋ค๊ณ ์ ๋ขฐ๋๋ฅผ ๋จ์ด๋จ๋ฆฐ๋ค.
โญ๏ธโญ๏ธโญ๏ธโญ๏ธโญ๏ธ ํ์ ์ ๊ฐ๋ค์ ์งํฉ์ด๋ค.
ํ์ ์ ๊ฐ๋ค์ ์งํฉ์ด๋ค. ๋ํ ์ด ์งํฉ์ ํ์ ์ ๋ฒ์๋ผ๊ณ ๋งํ๋ค. ์ด ๊ฐ๋ ์ ์์๋ฌ์ผ ํ์ ์ ๋ํด ์ดํดํ๊ธฐ ์ฉ์ดํ๋ค.
TypeScript๋ ํ์
์ ๊ฒ์ฌํ ๋, ์ ์ธ๋ ํ์
์
1 | type AB = "A" | "B"; |
- โCโ ํ์์ AB ํ์์ ํ ๋นํ ์ ์์ต๋๋ค.
- โCโ ํ์์ AB ํ์์ ๋ถ๋ถ์งํฉ์ด ์๋๋ค.
- โCโ ํ์์ AB ํ์์ ์์๊ฐ ์๋๋ค.
- โCโ ํ์์ AB ํ์์ ์๋ธํ์ ์ด ์๋๋ค.
- โCโ ํ์์ AB ํ์์ ์์ ๋ฐ์ง ์๋๋ค.
๋ชจ๋ ๊ฐ์ ๋ง์ด๋ฏ๋ก ์ผ๋ํ์.
๐น & ์ฐ์ฐ์ (๊ต์งํฉ, intersection)
1 | interface Person { |
- & ์ฐ์ฐ์๋ ๋ ํ์ ์ ์ธํฐ์น์ (๊ต์งํฉ)์ ๊ณ์ฐํ๋ค.
์ธ๋ป ๋ณด๋ฉด ๊ต์งํฉ์ด๋ผํ๋ฉด ๊ณตํต์ผ๋ก ๊ฐ์ง๊ณ ์๋ ์์๋ง ํ์ธํ๋ค๊ณ ์๊ฐ์ด ๋ค์ด ์ ์์๊ฐ ์๋ชป๋์๋ค๊ณ ์๊ฐ์ด ๋ ๋ค.
ํ์ง๋ง,
์ฆ, PersonSpan์ Person ์ด๋ผ๋ ์์ฑ์ ํฌํจํ๋ ์งํฉ๊ณผ Lifespan ์ด๋ผ๋ ์์ฑ์ ํฌํจํ๋ ์งํฉ์ ๊ต์งํฉ์ด ๋๊ธฐ ์ํด์๋ Person์ name ํ๋กํผํฐ๋ ๊ฐ์ ธ์ผ ํ๊ณ Lifespan์ birth ์์ฑ์ ๊ฐ์ง ์งํฉ์ ์๋ฏธํ๋ค. (deate ์์ฑ์ optionalํ๋ฏ๋กโฆ)
ํท๊ฐ๋ฆฐ๋ค๋ฉดโฆ extends ๊ตฌ๋ฌธ์ผ๋ก ์ ์ธํ ์ ์๋ค.
1 | interface Person { |
์ ๋์จ์์ & ์ฐ์ฐ์
1 | type K = keyof (Person | Lifespan); // type is 'never' |
keyof ์ฐ์ฐ์๋ ๊ฐ์ฒด์ ํค ๊ฐ๋ค์ ์ซ์๋ ๋ฌธ์์ด ๋ฆฌํฐ๋ด ์ ๋์ธ์ ์์ฑํ๋ค.
์ฆ, Person์ key๊ฐ name, Lifespan์ key๊ฐ birth,death์ ์ ๋์จ์ธ name | birth ์ ์ํ๋ ๊ฐ์ ์ด๋ ํ ํค๋ ์๊ธฐ ๋๋ฌธ์ never
๊ฐ ๋๋ค.
๋ช ํํ ์ฌ์ฉํ๋ฉด ์๋์ ๊ฐ๋ค
1 | keyof (A&B) = (keyof A) | (keyof B); // A์ key ๊ฐ์ด๊ฑฐ๋ B์ key ๊ฐ์ธ ๊ฒ |
โ๏ธ ์ ๋ค๋ฆญ ์์
1 | interface Point { |
- type K๋ type T์ ์์์ ๋ฐ๋๋ค.
- ์ ํจ์์์ T๊ฐ ๊ณง Point ์ด๋ค.
- ๊ทธ๋ฌ๋ฏ๋ก K๋ keyof T์ด๋ฏ๋ก โxโ|โyโ ์ด๋ค.
K extends keyof T
๋ฅผ ์ฌ์ฉํ์ฌ ์ ํ๋ ํ์ ์ ๊ตฌํํ์๋ค.
๐ฆ ํ์ ๊ณต๊ฐ๊ณผ ๊ฐ ๊ณต๊ฐ ๊ตฌ๋ถํ๊ธฐ
JavaScript์ symbol์ ํ์ ๊ณต๊ฐ์ด๋ ๊ฐ ๊ณต๊ฐ ์ค ํ ๊ณณ์ ์กด์ฌํ๋ค. symbol์ ์ด๋ฆ์ด ๊ฐ๋๋ผ๋ ์ํ๋ ๊ณต๊ฐ์ ๋ฐ๋ผ ๋ํ๋ด๋ ๊ฒ์ด ๋ค๋ฅด๋ค.
1 | type T1 = "string literal"; |
- type ๋ค์ ์ฌ๋ณผ์ธ T1, T2๋ ํ์ ๊ณต๊ฐ์ ์์ผ๋ฏ๋ก ํ์ ์ ๋ํ๋ธ๋ค. ์ปดํ์ผ ๊ณผ์ ์์ ์ฌ๋ผ์ง๋ค.
class์ enum์ ์ํฉ์ ๋ฐ๋ผ ๊ฐ, ํ์ ๋๊ฐ์ง ๋ชจ๋ ๊ฐ๋ฅ
1 | class Cylinder { |
- ํด๋์ค๊ฐ ๊ฐ์ผ๋ก ์ฐ์ผ ๋๋ ์์ฑ์๊ฐ ์ฌ์ฉ๋์ง๋ง ํ์ ์ผ๋ก ์ฌ์ฉ๋ ๋๋ ์์ฑ๊ณผ ๋ฉ์๋๊ฐ ์ฌ์ฉ๋๋ค.
- ์ฌ๊ธฐ์ ์ค์ํ ๊ฒ์
Cylinder๊ฐ ์ธ์คํด์ค์ ํ์ ์ด ์๋๋ผ๋ ๊ฒ์ด๋ค.