1. The Basics
Static type-checking
์๋ฐ์คํฌ๋ฆฝํธ : dynamic typing
์๋ฐ์คํฌ๋ฆฝํธ๋ ๋ฐํ์์ ๋ฐ์ํ๋ ์๋ฌ์ ๋ํด์ ๋ฏธ๋ฆฌ ์์ง ๋ชปํ๋ค.
ํ์ ์คํฌ๋ฆฝํธ : static type-checking (์ ์ ํ์ ์ฒดํฌ)
ํ์ ์คํฌ๋ฆฝํธ๋ ํ๋ก๊ทธ๋จ์ด ์คํ๋๊ธฐ ์ ์ ํ์ ์ด ์ฌ๋ฐ๋ฅธ์ง๋ฅผ ํ์ธํด์ค๋ค.
์ ์ ํ์ ์์คํ ์ ํ๋ก๊ทธ๋จ์ด ์คํ๋ ๋, value์ ๋ชจ์๊ณผ ํ๋์ด ์ด๋ ํ์ง๋ฅผ ์ค๋ช ํด์ค๋ค.
ํ์ ์คํฌ๋ฆฝํธ๋ ํด๋น ์ ๋ณด๋ฅผ ์ฌ์ฉํ์ฌ, ์ด ํ๋ก๊ทธ๋จ ์คํ ๊ฒฐ๊ณผ ์ด๋ค ์๋ฌ๊ฐ ๋ฐ์ํ๋์ง๋ฅผ ๋งํด์ค ์ ์๋ค.

Non-exception Failures
์๋ฐ์คํฌ๋ฆฝํธ
์๋ฐ์คํฌ๋ฆฝํธ๋ ๋ฐํ์ ์๋ฌ๋ฅผ ๋์ง ์ ์๋ค.
์๋ฅผ ๋ค์ด, callableํ์ง ์๋ string์ ํธ์ถํ ๊ฒฝ์ฐ์ ์๋ฌ๋ฅผ ๋์ง๋ค.
๋ฐํ์์๋ ์๋ฌ๋ฅผ ๋์ง์ง ์๋ ๊ฒฝ์ฐ๊ฐ ์๋ค.
์๋ฅผ ๋ค์ด ๊ฐ์ฒด์์ ์กด์ฌํ์ง ์๋ ํ๋กํผํฐ์ ์ ๊ทผํ๋ฉด ์๋ฌ๋ฅผ ๋์ง์ง ์๊ณ undefined๋ฅผ ๋ฐํํ๋ค.
ํ์ ์คํฌ๋ฆฝํธ
์ ์ ํ์ ์์คํ ์์๋ ์๋ฐ์คํฌ๋ฆฝํธ์์๋ validํ๊ธฐ์ ๋ฐ๋ก ์๋ฌ๋ฅผ ๋์ง์ง ์๋ ์ฝ๋์ ๋ํด์๋, ์๋ฌ๋ผ๊ณ ๋งํด์ค๋ค.

์คํ, ํธ์ถ๋์ง ์๋ ํจ์, ๋จ์ํ ๋ก์ง ์๋ฌ์์๋ ์๋ฌ๋ฅผ ๋์ง๋ค.
Types for Tooling
ํ์ ์คํฌ๋ฆฝํธ๋ ์ค์๋ฅผ ์ฒ์ ์ฝ๋๋ฅผ ์์ฑํ ๋๋ถํฐ ๋ฐฉ์งํ ์ ์๊ฒ ๋์์ค๋ค.
ํ์ ์คํฌ๋ฆฝํธ๋ ํ๋กํผํฐ๋ฅผ ์ ์ํด์ค ์ ์๋ค.
์ฝ๋๋ฅผ ์์ฑํ๋ ์ค์๋ ์๋ฌ ๋ฉ์์ง๋ฅผ ๋ณด์ฌ์ฃผ๊ฑฐ๋, ์ฝ๋ ์๋์์ฑ์ ํด์ค ์ ์๋ค.
ํ์ ์คํฌ๋ฆฝํธ๋ฅผ ์ง์ํ๋ ์๋ํฐ์์๋ ์๋์ผ๋ก ์๋ฌ๋ฅผ ๊ณ ์ณ์ฃผ๊ฑฐ๋, ๋ฆฌํฉํ ๋งํด์ฃผ๊ฑฐ๋, ๋ณ์์ ์ ์๋ก ์ด๋ํ๊ฒ ํด์ฃผ๊ฑฐ๋, ๋ณ์์ ๋ชจ๋ reference๋ฅผ ์ฐพ๊ฒํด์ฃผ๋ ๋ฑ์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
tsc
, ํ์
์คํฌ๋ฆฝํธ ์ปดํ์ผ๋ฌ
tsc
, ํ์
์คํฌ๋ฆฝํธ ์ปดํ์ผ๋ฌtsc๋ ํ์ ์คํฌ๋ฆฝํธ ํ์ผ์ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ๋ก ์ปดํ์ผ์ํจ๋ค.
tsc๋ ์ปดํ์ผ ๊ณผ์ ์์ ์๋ฌ๋ฅผ ์ปค๋งจ๋๋ผ์ธ์ผ๋ก ๋ณด์ฌ์ค๋ค.
// This is an industrial-grade general-purpose greeter function:
function greet(person, date) {
console.log(`Hello ${person}, today is ${date}!`);
}
greet("Brendan");

Explicit Types
๋ช ์์ ์ธ ํ์
ํ์ ์ ๋ช ์์ ์ผ๋ก ์์ฑํ ์ ์๋ค.
function greet(person: string, date: Date) {
console.log(`Hello ${person}, today is ${date.toDateString()}!`);
}
ํ์ ์ถ๋ก
๋ช ์์ ์ธ ํ์ ์ด ์๋ค๋ฉด, ํ์ ์คํฌ๋ฆฝํธ๋ ํ์ ์ ์ถ๋ก ํ๋ค.
ํ์ ์คํฌ๋ฆฝํธ๊ฐ ๊ฐ์ ํ์ ์ ์ถ๋ก ํ๊ฒ ๋๋ค๋ฉด, ํ์ ์ ๋ช ์ํ์ง ์๋ ๊ฒ์ด ์ข๋ค.

Erased Types
hello.ts
function greet(person: string, date: Date) { console.log(`Hello ${person}, today is ${date.toDateString()}!`); } greet("Maddison", new Date());
hello.js
function greet(person, date) { console.log("Hello " + person + ", today is " + date.toDateString() + "!"); } greet("Maddison", new Date());
hello.ts๋ฅผ ์ปดํ์ผํ ๊ฒฐ๊ณผ ts์ js ํ์ผ์ ๋ ๊ฐ์ง ์ฐจ์ด์ ์๊ธด๋ค. 1. person๊ณผ date ํ๋ผ๋ฏธํฐ์ ํ์
ํ์๊ฐ ์ฌ๋ผ์ก๋ค. 2. template string์ด +
๋ก ๋ง๋ถ์ฌ์ง plain string์ผ๋ก ๋ณํ๋์๋ค.
1๋ฒ ์ฒ๋ผ ํ์ ํ์๊ฐ ์ฌ๋ผ์ง ์ด์ ๋ ๋ธ๋ผ์ฐ์ ๋ ๋ฐํ์์ ํ์ ์คํฌ๋ฆฝํธ๋ฅผ ์คํ์ํฌ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
๋ฐ๋ผ์, ํ์ ์คํฌ๋ฆฝํธ๋ ์ปดํ์ผ๋ฌ๊ฐ ๋จผ์ ์คํ์ด ๋์ด์, Typescript-specific ์ฝ๋๋ฅผ ์์ ๊ฑฐ๋ ๋ณํ์์ผ์ผ ํ๋ค.
Downleveling
์์ ์์์์ 2๋ฒ๊ณผ ๊ฐ์ด ์ปดํ์ผ๋ฌ๊ฐ template string์ +
๋ก ์คํธ๋ง๋ค์ด ๋ง๋ถ์ฌ์ง ํํ๋ก ๋ณํํ ์ด์ ๋ ๋ฌด์์ผ๊น?
Downleveling
template string์ ECMAScript 2015 (ES6)์ ๋ฌธ๋ฒ์ด๋ค. ํ์
์คํฌ๋ฆฝํธ๋ ECMAScript์ ๋์ ๋ฒ์ ์์ ํ์ ๋ฒ์ ์ผ๋ก ์ฝ๋๋ฅผ ์ฌ์์ฑ์ํฌ ์ ์๋ค. ์ด๋ฅผ downleveling
์ด๋ผ๊ณ ํ๋ค.
๋ํดํธ๋ก ํ์ ์คํฌ๋ฆฝํธ์ target์ ES3์ด๋ค. ๋ง์ฝ ํ๊ฒ์ ES6๋ก ๋ณ๊ฒฝ์ํจ๋ค๋ฉด, template string์ ๋ณํ๋์ง ์๊ฒ ๋๋ค.
es6๋ฅผ ํ๊ฒ์ผ๋ก ์ปดํ์ผํ๋ ์ปค๋งจ๋
tsc --target es6 hello.ts
hello.js
function greet(person, date) {
console.log(`Hello ${person}, today is ${date.toDateString()}!`);
}
greet("Maddison", new Date());
Last updated