๐ TypeScript
ํ์ ์คํฌ๋ฆฝํธ ์์ Part 2 (5~9) : ํด๋์ค, ์ค๋ธ์ ํธ ํ์ ์ง์
Car ํด๋์ค ๋ง๋ค๊ธฐ { model : '์๋ํ', price : 3000 } ์ด๋ ๊ฒ ์๊ธด object๋ฅผ ๋ณต์ฌํด์ฃผ๋ class๋ฅผ ๋ง๋ค์ด์ผ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ๋ณต์ฌ๋ object ์๋ฃ๋ค์ .tax() ๋ผ๋ ํจ์๋ฅผ ์ฌ์ฉ๊ฐ๋ฅํ๋ฐ ํ์ฌ object์ ์ ์ฅ๋ price์ 10๋ถ์1์ ์ถ๋ ฅํด์ฃผ์ด์ผํ๋ค. model๊ณผ price ์์ฑ๊ณผ tax() ํจ์์ return ํ์ ์ง์ ํ์. class Car { model: string; price: number; constructor(model: string, price: number) { this.model = model; this.price = price; } tax() :number{ return this.price / 10; } } const morning = new Car..
[์ฝ๋ฉ์ ํ] ํ์ ์คํฌ๋ฆฝํธ์์์ class : constructor, prototype ํ์ ์ง์
ํ์ ์คํฌ๋ฆฝํธ์์ class์ constructor ์ฌ์ฉํ๊ธฐ ์ผ๋ฐ์ ์ธ JavaScript ํด๋์ค ๋ฐ ๊ฐ์ฒด ์์ฑ์ ์์์ด๋ค. // JavaScript class Candidate { constructor(personality, age, gender) { this.personality = personality; this.age = age; this.gender = gender; } } const candidate1 = new Candidate('good', 28, 'woman'); JavaScript์์๋ ํ์ ์ ๋ณด๋ฅผ ๋ช ์์ ์ผ๋ก ์ ์ธํ์ง ์๋๋ค. ๊ทธ๋ ๊ฒ ๋๋ฌธ์ ์์ฒ๋ผ๋ง ํ๊ธฐํด๋ ๋์ง๋ง, ํ์ ์คํฌ๋ฆฝํธ์์๋ ๊ฐ ์์ฑ๊ณผ ๋งค๊ฐ๋ณ์์ ํ์ ์ง์ ์ ํด์ฃผ์ด์ผ ํ๋ค. // TypeScript class Candidate { ..
[์ฝ๋ฉ์ ํ] ํ์ ์คํฌ๋ฆฝํธ HTML ์กฐ์์ ์ฃผ์์ (2) : ๋ narrowingํ๊ธฐ
์ฐ์ .. { "compilerOptions": { ... "strictNullChecks": true, ... }, } tsconfig.json ํ์ผ์์ strictNullCheck ์ต์ ์ true๋ก ๋ฐ๊พผ๋ค. (ํน์ "strict" : true๋ก ์จ๋ฌ๋ ๋๋ค) ์ด๋ ๊ฒ ์ค์ ํ๋ฉด TypeScript ์ปดํ์ผ๋ฌ๋ ๋ ์๊ฒฉํ ๊ท์น์ ์ ์ฉํ๋ฉฐ, ๋ณ์์ ๋ํ null ์ฒดํฌ๊ฐ ๊ฐ์ ๋๋ค. href ์กฐ์์ ์ค๋ฅ let link = document.querySelector('#link'); if(link instanceof HTMLElement){ link.href = 'https://kakao.com'; } HTMLElement ํ์ ์ href ์์ฑ์ด ์๋ค๋ ์ค๋ฅ๊ฐ ๋ฌ๋ค. ๋งํฌํ๊ทธ์ ๊ฒฝ์ฐ์๋ ์ข๋ ์ข๊ฒ narrowingํด..
[์ฝ๋ฉ์ ํ] ํ์ ์คํฌ๋ฆฝํธ HTML ์กฐ์์ ์ฃผ์์ (1)
์ฐ์ .. { "compilerOptions": { ... "strictNullChecks": true, ... }, } tsconfig.json ํ์ผ์์ strictNullCheck ์ต์ ์ true๋ก ๋ฐ๊พผ๋ค. (ํน์ "strict" : true๋ก ์จ๋ฌ๋ ๋๋ค) ์ด๋ ๊ฒ ์ค์ ํ๋ฉด TypeScript ์ปดํ์ผ๋ฌ๋ ๋ ์๊ฒฉํ ๊ท์น์ ์ ์ฉํ๋ฉฐ, ๋ณ์์ ๋ํ null ์ฒดํฌ๊ฐ ๊ฐ์ ๋๋ค. HTML ์กฐ์์ ์ค๋ฅ let title = document.querySelector('#title'); title.innerHTML = '์๋ ํ์ธ์'; // title is possibly Element | null TypeScript์์ strictNullChecks ์ต์ ์ด ํ์ฑํ๋ ๊ฒฝ์ฐ, ์ ๋ฉ์๋์ ๋ฐํ ํ์ ์ Element | ..
[์ฝ๋ฉ์ ํ] ํจ์์ object ๋ฉ์๋์ type alias ์ง์ ํ๊ธฐ
ํจ์ type alias ํจ์ ํ์ ๋ type alias๋ก ์ ์ฅํด์ ์ธ ์ ์๋ค. type NumOut = (x : number, y : number ) => number let ABC :NumOut = function(x,y){ return x + y } function ํค์๋์๋ ํ๋ผ๋ฏธํฐ ๋ด๋ถ๋ {} ๋ฐ๋ก ์ผ์ชฝ์๋ง ํ์ ์ง์ ์ด ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ function ํจ์์ด๋ฆ :NumOut (){} ํํ๋ ์ฌ์ฉํ ์ ์์ด์ ์ ์ฝ๋์ฒ๋ผ ์ฌ์ฉํ๋ค. *** ์ฃผ์์ฌํญ : ํจ์ type alias๋ฅผ ๋ถ์ฐฉํ๋ ค๋ฉด ํจ์ํํ์์ผ๋ก ์จ์ผ ํ๋ค. object ๋ฉ์๋ type alias type Member = { name : string, age : number, plusOne : ( x :number ) => number, c..
[์ฝ๋ฉ์ ํ] ํ์ ์ ํน์ ๊ฐ์ผ๋ก ์ง์ ํ์ : Literal Types (+ as const)
Literal Types ํ์ ์ง์ ์ ๋์ฑ strictํ๊ฒ ํน์ ๊ธ์๋ ์ซ์๋ง ๊ฐ์ง ์ ์๊ฒ ์ ํ์ ๋ ์ ์๋ค. // ๋ฌธ์์ด ๋ฆฌํฐ๋ด ํ์ ์ ์ฌ์ฉํ ํ๋ผ๋ฏธํฐ function greet(name: "Alice" | "Bob"): "Hello, Alice!" | "Hello, Bob!" { return `Hello, ${name}!`; } // ์ซ์ ๋ฆฌํฐ๋ด ํ์ ์ ์ฌ์ฉํ ํ๋ผ๋ฏธํฐ function multiply(a: 2 | 3, b: 2 | 3): 6 { return a * b; } // ๋ถ๋ฆฌ์ธ ๋ฆฌํฐ๋ด ํ์ ์ ์ฌ์ฉํ ๋ฆฌํด๊ฐ function isAdmin(userType: "admin" | "regular"): boolean { return userType === "admin"; } // ์ฌ์ฉ ์์ consol..