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๋Š” ์ปดํŒŒ์ผ ๊ณผ์ •์—์„œ ์—๋Ÿฌ๋ฅผ ์ปค๋งจ๋“œ๋ผ์ธ์œผ๋กœ ๋ณด์—ฌ์ค€๋‹ค.

// 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