What is TypeScript?
ํ์ ์คํฌ๋ฆฝํธ๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ์ ์ ํ์ ์ ์(static type definitions)๋ฅผ ๋ํด ๊ตฌ์ถ๋ ์คํ์์ค ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ค.
(Microsoft์์ ๊ฐ๋ฐํ๊ณ ๊ด๋ฆฌํจ)
ํ์ ์คํฌ๋ฆฝํธ ์ฝ๋๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ปดํ์ผ๋ฌ๋ ๋ฐ๋ฒจ์ ํตํด ์๋ฐ์คํฌ๋ฆฝํธ๋ก ๋ณํ๋๋ค. ์ด๋ฅผ ํธ๋์คํ์ผ(transpile)์ด๋ผ๊ณ ๋ ํ๋ค. (ํธ๋์คํ์ผ: ์ด๋ค ํน์ ์ธ์ด๋ก ์์ฑ๋ ์์ค ์ฝ๋๋ฅผ ๋ค๋ฅธ ์์ค ์ฝ๋๋ก ๋ณํํ๋ ๊ฒ)
ํ์ ์คํฌ๋ฆฝํธ๋ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ๋์๊ฐ๋ ์ด๋์๋ ๋์๊ฐ๋ค. (In a browser, on Node.JS or in your apps.)
ํ์ ์คํฌ๋ฆฝํธ๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ์์ ์งํฉ์ผ๋ก์ ECMA์ ์ต์ ํ์ค์ ์ถฉ๋ถํ ์ง์ํ๋ค. ํ์ ์ด๋ผ๋ ํน์ง์ ๊ฐ์ง๊ณ ES7์ดํ์ ํ์ค์ ํฌํจํ๊ณ ์๋ค. ํ์ ์คํฌ๋ฆฝํธ๋ ES5๋ฅผ ํฌํจํ๋ ์งํฉ์ด๊ธฐ ๋๋ฌธ์ ๊ธฐ์กด์ ES5 ์๋ฐ์คํฌ๋ฆฝํธ ๋ฌธ๋ฒ์ ๊ทธ๋๋ก ์ฌ์ฉํ ์ ์๋ค. ๋ํ, ES6์ ์๋ก์ด ๊ธฐ๋ฅ๋ค์ ์ฌ์ฉํ๊ธฐ ์ํด Babel๊ณผ ๊ฐ์ ๋ณ๋ ํธ๋์คํ์ผ๋ฌ๋ฅผ ์ฌ์ฉํ์ง ์์๋ ES6์ ์๋ก์ด ๊ธฐ๋ฅ์ ๊ธฐ์กด์ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์์ ์ฌ์ฉํ ์ ์๋ค.
์ ์ ํ์ ์ธ์ด(static type language)์ด๊ธฐ ๋๋ฌธ์ ์ปดํ์ผ ์ ์๊ฐ์ด ์กฐ๊ธ ๊ฑธ๋ฆฌ๋๋ผ๋ ์์ ์ฑ์ ๋ณด์ฅํ๋ค. ์๋ฐ์คํฌ๋ฆฝํธ์ ๊ฒฝ์ฐ๋ ๋์ ํ์ ์ธ์ด(dynamic type language)์ด๊ธฐ ๋๋ฌธ์ ๋ฐํ์ ์๋๋ ๋น ๋ฅด์ง๋ง ํ์ ์์ ์ฑ์ด ๋ณด์ฅ๋์ง ์๋๋ค. ํ์ ์คํฌ๋ฆฝํธ๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ์ด๋ฌํ ๋จ์ ์ ๋ณด์ํ๊ธฐ ์ํด์ ๋ง๋ค์ด ์ก๋ค. ์ด๋ฌํ ์ด์ ๋ก MS์์๋ ํ์ ์คํฌ๋ฆฝํธ์ โJavaScript that scales(ํ์ฅ๋ ์๋ฐ์คํฌ๋ฆฝํธ)โ๋ผ๋ ์ฌ๋ก๊ฑด์ ๋ง๋ค์๋ค.
Basic type์๋ ์ฐ๋ฆฌ๊ฐ javascript์์ ํํ ์ฌ์ฉํ๊ธธ ์์ํ๋ ๋จ์ํ ๋จ์์ ๋ฐ์ดํฐ๊ฐ ์๋ค.
Boolean(boolean), Number(number), String(string), Array(number[], Array)
๐ ์๋ค๋ค์ ๋๋ถ๋ถ์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ์ฌ์ฉ๋๋ฏ๋ก pass!
// Declare a tuple type
let x: [string, number];
// Initialize it
x = ["hello", 10]; // OK
// Initialize it incorrectly
x = [10, "hello"]; // Error
enum Color {
Red,
Green,
Blue,
}
let c: Color = Color.Green;
if (typeof maybe === "string"){}
const temp:any = 4
temp.toString()
any์ ์ซ์๋ฅผ ํ ๋นํ๊ณ ์ ๋ฉ๋๋ก ๋ฌธ์์ด ํจ์๋ฅผ ํธ์ถํด๋ ํ์ ์คํฌ๋ฆฝํธ๊ฐ ์ก์์ฃผ์ง ์์ผ๋ ์ฃผ์ํด์ ์ฌ์ฉํด์ผํ๋ค.
Void: any์ ๋ฐ๋๋ผ๊ณ ๋ ๋ณผ ์ ์์, ์๋ฌด๊ฒ๋ ํ์ ์ด ์์ ๋ void ์ (์ฃผ๋ก ํจ์๋ฆฌํดํ์ )
Null, Undefined ํ์ ๋ ์๋๋ฐ ๋ณ๋ก ์ ์ ์ฉํจ
Never: ์๋ฌ๋ฅผ ๋ฆฌํดํ๊ฑฐ๋, ๋ฌดํ๋ฃจํ์ฌ์ ์์ ๋ฆฌํดํ์ง ์๋ ๊ฒฝ์ฐ์ ํจ์ ๋ฆฌํด ํ์ ์ผ๋ก ์ฐ์.
Object: non-primitive type์ผ๋ก number, string, boolean, bigint, symbol, null, or undefined๊ฐ ์๋! โ ์ผ๋ฐ์ ์ผ๋ก ๋ฑํ ์ ํ์ํจ
ํ์ ์คํฌ๋ฆฝํธ๋ ๋ณ์๋ฅผ ์ด๊ธฐํํ๊ฑฐ๋ ํ๋ผ๋ฏธํฐ๋ฅผ ๋๊ฒจ์ฃผ๊ฑฐ๋ ํจ์๋ฅผ ๋ฐํํ ๋ ๋ช ๋ฐฑํ ํ์ ์ด ์ง์ ๋์ง ์์ ๊ฒฝ์ฐ ํ์ ์ ์ถ๋ก ํ๋ค.
let x = 3;
// ^ = let x: number
let x = [0, 1, null];
// ^ = let x: (number | null)[]
๋ณ์์ ํ์ฌ ํ์ ๋ณด๋ค ๋ด๊ฐ ์๊ณ ์๋ ์ด ํ์ ์ด ๋ ๋ช ํํ ๋ type assertion์ ํ๋ค. (assert๊ฐ ์ฃผ์ฅํ๋ค๋ผ๋ ๋ป)
Type assertions are a way to tell the compiler โtrust me, I know what Iโm doing.โ (์ผ์ผ ๋ ์ด๊ฑฐ ๋ฌด์จํ์ ์ธ์ง ์์. ๋ ๋ฏฟ์ด๋ด.)
as-syntax์ angle-bracket ๋ ๊ฐ์ง๋ก ์ฌ์ฉํ ์ ์์
// '๋ ์ด๊ฑฐ ํ์คํ ๋ฌธ์์ด์ธ๊ฑฐ ์์'ํ๋ฉด์ as ๋ก string์ด๋ผ๊ณ ํ์
์ง์ ํ์ฌ length๋ฅผ ์ฌ์ฉ
let someValue: unknown = "this is a string";
// as-syntax
let strLength: number = (someValue as string).length;
// angle-bracket
let strLength: number = (<string>someValue).length;
JSX์ ๊ฐ์ด ์ฐ์ผ๋๋ as-style assertion๋ง ์ฌ์ฉํ๋ค.
(โ๏ธ์ถ๊ฐ์ ์ผ๋ก Number, String, Boolean, Symbol, or Object ์ด๋ฐ๊ฒ๋ค์ number, string, boolean ๋ฑ๊ณผ ๊ฐ์ด ํ์ ์ผ๋ก ํ ๋นํ ์ ์์ ๊ฒ ๊ฐ์๋ณด์ด๋๋ฐ ์ค๋ค๋ ํ์ ํ ๋นํ ๋ ์ฐ์ง ์๋๋ค)
ํ์ ์ ๊ฒ์ฌํ๋ ๋ฉ์๋๋ฅผ ๋ง๋ค์ด์ ๋ช ์์ ์ผ๋ก ํ์ ์ ๊ฒ์ฌํ์!
Type guard๋ฅผ ์ฌ์ฉํ๋ฉด ์กฐ๊ฑด๋ฌธ์์ ๊ฐ์ฒด์ ํ์ ์ ์ขํ๋๊ฐ ์ ์๋ค.
์ด ๋งํฌ๊ฐ ์ ๋ฆฌ๊ฐ ๊น๋ํด์ ์ด๊ฑฐ ์ฝ์ผ๋ฉด ๋๋ค.
(โ๏ธ ์ฌํด ๋ฒ๋ ค์ผ ํ ts ๋์ ๋ฒ๋ฆ 10 ๊ฐ์ง 4๋ฒ์งธ์ ๋ฐ๋ฅด๋ฉด Type assertion๋ณด๋ค type guard๋ฅผ ํตํด ๋ช ์์ ์ผ๋ก ๊ฒ์ฆํ๋ ๊ฒ์ด ์ถํ ์ ์ง๋ณด์ ๋น์ฉ์ ๋ ๋ฎ์ถ๋ค๊ณ ํ๋ค!)
typeof
์ฌ์ฉ๋ฒ: typeof operand
operand์ ํ์ ์ string์ผ๋ก ๋ฐํ (ex) type of "blabla" === "string" โ true)
instanceof
์ฌ์ฉ๋ฒ: object instanceof constructor
object๊ฐ constructor์ ์ธ์คํด์ค์ด๋ฉด true ๋ฐํ
in
์ฌ์ฉ๋ฒ: prop in object
prop์ด object์ property๋ฉด true ๋ฐํ