๐ค Chapter 1: ํ์ ์คํฌ๋ฆฝํธ ์์๋ณด๊ธฐ
๐ฅ ์์ดํ 1. ํ์ ์คํฌ๋ฆฝํธ์ ์๋ฐ์คํฌ๋ฆฝํธ์ ๊ด๊ณ ์ดํดํ๊ธฐโ
ํ์
์คํฌ๋ฆฝํธ๋ ๋ฌธ๋ฒ์ ์ผ๋ก๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ์์์งํฉ(superset)์
๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ ํ๋ก๊ทธ๋จ์ ๋ฌธ๋ฒ ์ค๋ฅ๊ฐ ์๋ค๋ฉด, ์ ํจํ ํ์
์คํฌ๋ฆฝํธ ํ๋ก๊ทธ๋จ์ด๋ผ๊ณ ํ ์ ์์ต๋๋ค. ํ์
์คํฌ๋ฆฝํธ๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ์์์งํฉ์ด๊ธฐ ๋๋ฌธ์ .js
ํ์ผ์ ์๋ ์ฝ๋๋ ์ด๋ฏธ ํ์
์คํฌ๋ฆฝํธ๋ผ๊ณ ํ ์ ์์ต๋๋ค. main.js
ํ์ผ๋ช
์ main.ts
๋ก ๋ฐ๊พผ๋ค๊ณ ํด๋ ๋ฌ๋ผ์ง๋ ๊ฒ์ ์์ต๋๋ค.
๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ ํ๋ก๊ทธ๋จ์ด ํ์ ์คํฌ๋ฆฝํธ๋ผ๋ ๋ช ์ ๋ ์ฐธ์ด์ง๋ง, ๊ทธ ๋ฐ๋๋ ์ฑ๋ฆฝํ์ง ์์ต๋๋ค. ํ์ ์คํฌ๋ฆฝํธ ํ๋ก๊ทธ๋จ์ด์ง๋ง ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์๋ ํ๋ก๊ทธ๋จ์ด ์กด์ฌํฉ๋๋ค. ์ด๋ ํ์ ์คํฌ๋ฆฝํธ๊ฐ ํ์ ์ ๋ช ์ํ๋ ์ถ๊ฐ์ ์ธ ๋ฌธ๋ฒ์ ๊ฐ์ง๊ธฐ ๋๋ฌธ์ ๋๋ค.
function greet(who: string) {
console.log('hello', who);
}
๊ทธ๋ฌ๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ๊ตฌ๋ํ๋ ๋
ธ๋ ๊ฐ์ ํ๋ก๊ทธ๋จ์ผ๋ก ์์ ์ฝ๋๋ฅผ ์คํํ๋ฉด ์ค๋ฅ๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
ํ์
๊ตฌ๋ฌธ์ ์ฌ์ฉํ๋ ์๊ฐ๋ถํฐ ์๋ฐ์คํฌ๋ฆฝํธ๋ ํ์
์คํฌ๋ฆฝํธ ์์ญ์ผ๋ก ๋ค์ด๊ฐ๊ฒ ๋ฉ๋๋ค.
ํ์ ์์คํ ์ ๋ชฉํ ์ค ํ๋๋ ๋ฐํ์์ ์ค๋ฅ๋ฅผ ๋ฐ์์ํฌ ์ฝ๋๋ฅผ ๋ฏธ๋ฆฌ ์ฐพ์๋ด๋ ๊ฒ์ ๋๋ค. ํ์ ์คํฌ๋ฆฝํธ๊ฐ "์ ์ " ํ์ ์์คํ ์ด๋ผ๋ ๊ฒ์ ๋ฐ๋ก ์ด๋ฐ ํน์ง์ ๋งํ๋ ๊ฒ์ ๋๋ค. ํ์ ์คํฌ๋ฆฝํธ๋ ํ์ ๊ตฌ๋ฌธ ์์ด๋ ์ค๋ฅ๋ฅผ ์ก์ ์ ์์ง๋ง, ํ์ ๊ตฌ๋ฌธ์ ์ถ๊ฐํ๋ค๋ฉด ํจ์ฌ ๋ ๋ง์ ์ค๋ฅ๋ฅผ ์ฐพ์๋ผ ์ ์์ต๋๋ค. ์ฝ๋์ "์๋"๊ฐ ๋ฌด์์ธ์ง ํ์ ๊ตฌ๋ฌธ์ ํตํด ํ์ ์คํฌ๋ฆฝํธ์ ์๋ ค์ค ์ ์๊ธฐ ๋๋ฌธ์ ์ฝ๋์ ๋์๊ณผ ์๋๊ฐ ๋ค๋ฅธ ๋ถ๋ถ์ ์ฐพ์ ์ ์์ต๋๋ค.
ํ์ ์คํฌ๋ฆฝํธ ํ์ ์์คํ ์ ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ฐํ์ ๋์์ ๋ชจ๋ธ๋งํฉ๋๋ค. ๋ฐํ์ ์ฒดํฌ๋ฅผ ์๊ฒฉํ๊ฒ ํ๋ ์ธ์ด๋ฅผ ์ฌ์ฉํด ์๋ค๋ฉด ๋ค์ ๊ฒฐ๊ณผ๋ค์ด ๊ฝค ๋นํฉ์ค๋ฝ๊ฒ ๋๊ปด์ง ์ ์์ต๋๋ค.
const x = 2 + '3'; // ์ ์, string ํ์
์
๋๋ค.
const y = '2' + 3; // ์ ์, string ํ์
์
๋๋ค.
์ด ์์ ๋ ๋ค๋ฅธ ์ธ์ด์๋ค๋ฉด ๋ฐํ์
์ค๋ฅ๊ฐ ๋ ๋งํ ์ฝ๋์
๋๋ค. ํ์ง๋ง ํ์
์คํฌ๋ฆฝํธ์ ํ์
์ฒด์ปค๋ ์ ์์ผ๋ก ์ธ์ํฉ๋๋ค. ๋ ์ค ๋ชจ๋ ๋ฌธ์์ด "23"์ด ๋๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฐํ์ ๋์์ผ๋ก ๋ชจ๋ธ๋ง๋ฉ๋๋ค.
๋ฐ๋๋ก ์ ์ ๋์ํ๋ ์ฝ๋์ ์ค๋ฅ๋ฅผ ํ์ํ๊ธฐ๋ ํฉ๋๋ค. ๋ค์์ ๋ฐํ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง ์๋ ์ฝ๋์ธ๋ฐ, ํ์
์ฒด์ปค๋ ๋ฌธ์ ์ ์ ํ์ํฉ๋๋ค.
const a = null + 7;
const b = [] + 12;
alert('hello', 'TypeScript');
์๋ฐ์คํฌ๋ฆฝํธ์ ๋ฐํ์ ๋์์ ๋ชจ๋ธ๋งํ๋ ๊ฒ์ ํ์ ์คํฌ๋ฆฝํธ ํ์ ์์คํ ์ ๊ธฐ๋ณธ ์์น์ ๋๋ค. ๊ทธ๋ฌ๋ ์์์ ๋ดค๋ ๊ฒฝ์ฐ๋ค์ฒ๋ผ ๋จ์ํ ๋ฐ ํ์ ๋์์ ๋ชจ๋ธ๋งํ๋ ๊ฒ๋ฟ๋ง ์๋๋ผ ์๋์น ์์ ์ด์ํ ์ฝ๋๊ฐ ์ค๋ฅ๋ก ์ด์ด์ง ์๋ ์๋ค๋ ์ ๊น์ง ๊ณ ๋ คํด์ผ ํฉ๋๋ค.
์์ ๋ฑ์ฅํ ์ค๋ฅ๋ค์ด ๋ฐ์ํ๋ ๊ทผ๋ณธ ์์ธ์ ํ์ ์คํฌ๋ฆฝํธ๊ฐ ์ดํดํ๋ ๊ฐ์ ํ์ ๊ณผ ์ค์ ๊ฐ์ ์ฐจ์ด๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ํ์ ์์คํ ์ด ์ ์ ํ์ ์ ์ ํ์ฑ์ ๋ณด์ฅํด ์ค ๊ฒ ๊ฐ์ง๋ง ๊ทธ๋ ์ง ์์ต๋๋ค. ์ ์ด์ ํ์ ์์คํ ์ ๊ทธ๋ฐ ๋ชฉ์ ์ผ๋ก ๋ง๋ค์ด์ง์ง๋ ์์์ต๋๋ค.
๐ฅ ์์ดํ 2. ํ์ ์คํฌ๋ฆฝํธ ์ค์ ์ดํดํ๊ธฐโ
ํ์
์คํฌ๋ฆฝํธ์ ์ค์ ๋ค์ ์ด๋์ ์์ค ํ์ผ์ ์ฐพ์์ง, ์ด๋ค ์ข
๋ฅ์ ์ถ๋ ฅ์ ์์ฑํ ์ง ์ ์ดํ๋ ๋ด์ฉ์ด ๋๋ถ๋ถ์
๋๋ค. ์ค์ ์ ์ ๋๋ก ์ฌ์ฉํ๋ ค๋ฉด, noImplicitAny
์ strictNullChecks
๋ฅผ ์ดํดํด์ผ ํฉ๋๋ค.
noImplicitAny
๋ ๋ณ์๋ค์ด ๋ฏธ๋ฆฌ ์ ์๋ ํ์
์ ๊ฐ์ ธ์ผ ํ๋์ง ์ฌ๋ถ๋ฅผ ์ ์ดํฉ๋๋ค. ๋ค์ ์ฝ๋๋ noImplicitAny
๊ฐ ํด์ ๋์ด ์์ ๋์๋ ์ ํจํฉ๋๋ค.
function add(a, b) {
return a + b;
}
ํธ์ง๊ธฐ์์ add
๋ถ๋ถ์ ๋ง์ฐ์ค๋ฅผ ์ฌ๋ ค ๋ณด๋ฉด, ํ์
์คํฌ๋ฆฝํธ๊ฐ ์ถ๋ก ํ ํจ์์ ํ์
์ ์ ์ ์์ต๋๋ค.
function add(a: any, b: any): any
any
ํ์
์ ๋งค๊ฐ๋ณ์์ ์ฌ์ฉํ๋ฉด ํ์
์ฒด์ปค๋ ์์ ์์ด ๋ฌด๋ ฅํด์ง๋๋ค. any
๋ ์ ์ฉํ์ง๋ง ๋งค์ฐ ์ฃผ์ํด์ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
any
๋ฅผ ์ฝ๋์ ๋ฃ์ง ์์์ง๋ง, any
ํ์
์ผ๋ก ๊ฐ์ฃผํ๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ ์์์ any
๋ผ๊ณ ๋ถ๋ฆ
๋๋ค. ๊ทธ๋ฐ๋ฐ ๊ฐ์ ์ฝ๋์์๋ noImplicitAny
๊ฐ ์ค์ ๋์ด์๋ค๋ฉด ์ค๋ฅ๊ฐ ๋ฉ๋๋ค. ์ด ์ค๋ฅ๋ค์ ๋ช
์์ ์ผ๋ก any
๋ผ๊ณ ์ ์ธํด ์ฃผ๊ฑฐ๋ ๋ ๋ถ๋ช
ํ ํ์
์ ์ฌ์ฉํ๋ฉด ํด๊ฒฐํ ์ ์์ต๋๋ค.
function add(a: number, b: number) {
return a + b;
}
ํ์
์คํฌ๋ฆฝํธ๋ ํ์
์ ๋ณด๋ฅผ ๊ฐ์ง ๋ ๊ฐ์ฅ ํจ๊ณผ์ ์ด๊ธฐ ๋๋ฌธ์, ๋๋๋ก noImplicitAny
๋ฅผ ์ค์ ํด์ผ ํฉ๋๋ค. ๊ทธ๋ฌ๋ฉด ํ์
์คํฌ๋ฆฝํธ๊ฐ ๋ฌธ์ ๋ฅผ ๋ฐ๊ฒฌํ๊ธฐ ์์ํด์ง๊ณ , ์ฝ๋์ ๊ฐ๋
์ฑ์ด ์ข์์ง๋ฉฐ, ๊ฐ๋ฐ์์ ์์ฐ์ฑ์ด ํฅ์๋ฉ๋๋ค.
strictNullChecks
๋ null
๊ณผ undefined
๊ฐ ๋ชจ๋ ํ์
์์ ํ์ฉ๋๋์ง ํ์ธํ๋ ์ค์ ์
๋๋ค.
const x: number = null; // ์ ์, null์ ์ ํจํ ๊ฐ์
๋๋ค.
๊ทธ๋ฌ๋ strictNullChecks
๋ฅผ ์ค์ ํ๋ฉด ์ค๋ฅ๊ฐ ๋ฉ๋๋ค.
const x: number = null; // error
null
๋์ undefined
๋ฅผ ์จ๋ ๊ฐ์ ์ค๋ฅ๊ฐ ๋ฉ๋๋ค. ๋ง์ฝ null
์ ์ฌ์ฉํ๋ ค๊ณ ํ๋ค๋ฉด, ์๋๋ฅผ ๋ช
์์ ์ผ๋ก ๋๋ฌ๋์ผ๋ก์จ ์ค๋ฅ๋ฅผ ๊ณ ์น ์ ์์ต๋๋ค.
const x: number | null = null;
strictNullChecks
๋ null
๊ณผ undefined
๊ด๋ จ๋ ์ค๋ฅ๋ฅผ ์ก์๋ด๋ ๋ฐ ๋ง์ ๋์์ด ๋์ง๋ง, ์ฝ๋ ์์ฑ์ ์ด๋ ต๊ฒ ํฉ๋๋ค. ์ ํ๋ก์ ํธ๋ฅผ ์์ ํ๋ค๋ฉด ๊ฐ๊ธ์ strictNullChecks
๋ฅผ ์ค์ ํ๋ ๊ฒ์ด ์ข์ง๋ง, ํ์
์คํฌ๋ฆฝํธ๊ฐ ์ฒ์์ด๊ฑฐ๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ๋ง์ด๊ทธ๋ ์ด์
ํ๋ ์ค์ด๋ผ๋ฉด ์ค์ ํ์ง ์์๋ ๊ด์ฐฎ์ต๋๋ค.
strictNullChecks
๋ฅผ ์ค์ ํ๋ ค๋ฉด noImplicitAny
๋ฅผ ๋จผ์ ์ค์ ํด์ผ ํฉ๋๋ค. ํ๋ก์ ํธ๊ฐ ๊ฑฐ๋ํด์ง์๋ก ์ค์ ๋ณ๊ฒฝ์ ์ด๋ ค์์ง ๊ฒ์ด๋ฏ๋ก, ๊ฐ๋ฅํ ํ ์ด๋ฐ์ ์ค์ ํ๋ ๊ฒ ์ข์ต๋๋ค.
๐ฅ ์์ดํ 3. ์ฝ๋ ์์ฑ๊ณผ ํ์ ์ด ๊ด๊ณ์์์ ์ดํดํ๊ธฐโ
ํ์ ์คํฌ๋ฆฝํธ ์ปดํ์ผ๋ฌ๋ ๋ ๊ฐ์ง ์ญํ ์ ํฉ๋๋ค.
- ์ต์ ํ์ ์คํฌ๋ฆฝํธ/์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ๋ธ๋ผ์ฐ์ ์์ ๋์ํ ์ ์๋๋ก ๊ตฌ๋ฒ์ ์ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ํธ๋์คํ์ผํฉ๋๋ค.
- ์ฝ๋์ ํ์ ์ค๋ฅ๋ฅผ ์ฒดํฌํฉ๋๋ค.
ํ์ ์คํฌ๋ฆฝํธ๊ฐ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ๋ณํ๋ ๋ ์ฝ๋ ๋ด์ ํ์ ์๋ ์ํฅ์ ์ฃผ์ง ์์ต๋๋ค. ๋ํ ๊ทธ ์๋ฐ์คํฌ๋ฆฝํธ์ ์คํ ์์ ์๋ ํ์ ์ ์ํฅ์ ๋ฏธ์น์ง ์์ต๋๋ค.
ํ์ ์ค๋ฅ๊ฐ ์๋ ์ฝ๋๋ ์ปดํ์ผ์ด ๊ฐ๋ฅํฉ๋๋คโ
์ปดํ์ผ์ ํ์ ์ฒดํฌ์ ๋ ๋ฆฝ์ ์ผ ๋ก ๋์ํ๊ธฐ ๋๋ฌธ์, ํ์ ์ค๋ฅ๊ฐ ์๋ ์ฝ๋๋ ์ปดํ์ผ์ด ๊ฐ๋ฅํฉ๋๋ค. ํ์ ์คํฌ๋ฆฝํธ ์ค๋ฅ๋ C๋ ์๋ฐ ๊ฐ์ ์ธ์ด๋ค์ ๊ฒฝ๊ณ ์ ๋น์ทํฉ๋๋ค. ๋ฌธ์ ๊ฐ ๋ ๋งํ ๋ถ๋ถ์ ์๋ ค ์ฃผ์ง๋ง, ๊ทธ๋ ๋ค๊ณ ๋น๋๋ฅผ ๋ฉ์ถ์ง๋ ์์ต๋๋ค.
๋ง์ฝ ์ค๋ฅ๊ฐ ์์ ๋ ์ปดํ์ผํ์ง ์์ผ๋ ค๋ฉด, tsconfig.json
์ noEmitOnError
๋ฅผ ์ค์ ํ๊ฑฐ๋ ๋น๋ ๋๊ตฌ์ ๋์ผํ๊ฒ ์ ์ฉํ๋ฉด ๋ฉ๋๋ค.
๋ฐํ์์๋ ํ์ ์ฒดํฌ๊ฐ ๋ถ๊ฐ๋ฅํฉ๋๋ค.โ
๋ค์์ฒ๋ผ ์ฝ๋๋ฅผ ์์ฑํด ๋ณผ ์ ์์ต๋๋ค.
interface Square {
width: number;
}
interface Rectangle extends Square {
height: number;
}
type Shape = Square | Rectangle;
function calculateArea(shape: Shape) {
if (shape instanceof Rectangle) {
// ~~~~~ "Rectangle"์ ํ์๋ง ์ฐธ์กฐํ์ง๋ง, ์ฌ๊ธฐ์๋ ๊ฐ์ผ๋ก ์ฌ์ฉ๋๊ณ ์์ต๋๋ค.
return shape.width * shape.height;
// ~~~~~ "Shape" ํ์์ "height" ์์ฑ์ด ์์ต๋๋ค.
} else {
return shape.width * shape.width;
}
}
instanceof
์ฒดํฌ๋ ๋ฐํฐ์์ ์ผ์ด๋์ง๋ง, Rectangle
์ ํ์
์ด๊ธฐ ๋๋ฌธ์ ๋ฐํ์ ์์ ์ ์๋ฌด๋ฐ ์ญํ ์ ํ ์ ์์ต๋๋ค. ํ์
์คํฌ๋ฆฝํธ์ ํ์
์ ์ ๊ฑฐ ๊ฐ๋ฅ(erasable)ํฉ๋๋ค. ์ค์ ๋ก ์๋ฐ์คํฌ๋ฆฝํธ๋ก ์ปดํ์ผ๋๋ ๊ณผ์ ์์ ๋ชจ๋ ์ธํฐํ์ด์ค, ํ์
, ํ์
๊ตฌ๋ฌธ์ ๊ทธ๋ฅ ์ ๊ฑฐ๋์ด ๋ฒ๋ฆฝ๋๋ค.
์์ ์ฝ๋์์ ๋ค๋ฃจ๊ณ ์๋ shape
ํ์
์ ๋ช
ํํ๊ฒ ํ๋ ค๋ฉด, ๋ฐํ์์ ํ์
์ ๋ณด๋ฅผ ์ ์งํ๋ ๋ฐฉ๋ฒ์ด ํ์ํฉ๋๋ค. ํ๋์ ๋ฐฉ๋ฒ์ height
์์ฑ์ด ์กด์ฌํ๋์ง ์ฒดํฌํด ๋ณด๋ ๊ฒ์
๋๋ค.
function calculateArea(shape: Shape) {
if ('height' in shape) {
shape; // ํ์
์ด Rectangle
return shape.width * shape.height;
} else {
shape; // ํ์
์ด Square
return shape.width * shape.width;
}
}
ํ์ ์ ๋ณด๋ฅผ ์ ์งํ๋ ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก๋ ๋ฐํ์์ ์ ๊ทผ ๊ฐ๋ฅํ ํ์ ์ ๋ณด๋ฅผ ๋ช ์์ ์ผ๋ก ์ ์ฅํ๋ 'ํ๊ทธ' ๊ธฐ๋ฒ์ด ์์ต๋๋ค.
interface Square {
kind: 'square';
width: number;
}
interface Rectangle {
kind: 'rectangle';
height: number;
width: number;
}
type Shape = Square | Rectangle;
function calculateArea(shape: Shape) {
if (shape.kind === 'rectangle') {
shape; // ํ์
์ด Rectangle
return shape.width * shape.height;
} else {
shape; // ํ์
์ด Square
return shape.width * shape.width;
}
}
์ด ๊ธฐ๋ฒ์ ๋ฐํ์์ ํ์ ์ ๋ณด๋ฅผ ์์ฝ๊ฒ ์ ์งํ ์ ์๊ธฐ ๋๋ฌธ์, ํ์ ์คํฌ๋ฆฝํธ์์ ํํ๊ฒ ๋ณผ ์ ์์ต๋๋ค. ํ์ (๋ฐํ์ ์ ๊ทผ ๋ถ๊ฐ)๊ณผ ๊ฐ(๋ฐํ์ ์ ๊ทผ ๊ฐ๋ฅ)์ ๋ ๋ค ์ฌ์ฉํ๋ ๊ธฐ๋ฒ๋ ์์ต๋๋ค. ํ์ ์ ํด๋์ค๋ก ๋ง๋ค๋ฉด ๋ฉ๋๋ค.
class Square {
constructor(public width: number) {}
}
class Rectangle extends Square {
constructor(public width: number, public height: number) {
super(width);
}
}
type Shape = Square | Rectangle;
function calculateArea(shape: Shape) {
if (shape instanceof Rectangle) {
shape; // ํ์
์ด Rectangle
return shape.width * shape.height;
} else {
shape; // ํ์
์ด Square
return shape.width * shape.width;
}
}
์ธํฐํ์ด์ค๋ ํ์
์ผ๋ก๋ง ์ฌ์ฉ ๊ฐ๋ฅํ์ง๋ง, Rectangle
์ ํด๋์ค๋ก ์ ์ธํ๋ฉด ํ์
๊ณผ ๊ฐ์ผ๋ก ๋ชจ๋ ์ฌ์ฉํ ์ ์์ผ๋ฏ๋ก ์ค๋ฅ๊ฐ ์์ต๋๋ค.
ํ์ ์ฐ์ฐ์ ๋ฐํ์์ ์ํฅ์ ์ฃผ์ง ์์ต๋๋คโ
๊ฐ์ ์ ์ ํ๊ธฐ ์ํด์๋ ๋ฐํ์์ ํ์ ์ ์ฒดํฌํด์ผ ํ๊ณ ์๋ฐ์คํฌ๋ฆฝํธ ์ฐ์ฐ์ ํตํด ๋ณํ์ ์ํํด์ผ ํฉ๋๋ค.
function asNumber(val: number | string): number {
return typeof(val) === 'string' ? Number(val) : val;
}
๋ฐํ์ ํ์์ ์ ์ธ๋ ํ์๊ณผ ๋ค๋ฅผ ์ ์์ต๋๋ค.โ
function setLightSwitch(value: boolean) {
switch (value) {
case true:
turnLightOn();
break;
case false:
turnLightOff();
break;
default:
console.log('์คํ๋์ง ์์๊น ๋ด ๊ฑฑ์ ๋ฉ๋๋ค.');
}
}
ํ์
์คํฌ๋ฆฝํธ๋ ์ผ๋ฐ์ ์ผ๋ก ์คํ๋์ง ๋ชปํ๋ ์ฃฝ์ ์ฝ๋๋ฅผ ์ฐพ์๋ด์ง๋ง, ์ฌ๊ธฐ์๋ strict
๋ฅผ ์ค์ ํ๋๋ผ๋ ์ฐพ์๋ด์ง ๋ชปํฉ๋๋ค. ๊ทธ๋ฌ๋ฉด ๋ง์ง๋ง ๋ถ๋ถ์ ์คํํ ์ ์๋ ๊ฒฝ์ฐ๋ ๋ฌด์์ผ๊น์? boolean
์ด ํ์
์ ์ธ๋ฌธ์ด๋ผ๋ ๊ฒ์ ์ฃผ๋ชฉํ๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. ํ์
์คํฌ๋ฆฝํธ์ ํ์
์ด๊ธฐ ๋๋ฌธ์ boolean
์ ๋ฐํ์์ ์ ๊ฑฐ๋ฉ๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ์๋ค๋ฉด ์ค์๋ก setLightSwitch
"ON"์ ํธ์ถํ ์๋ ์์์ ๊ฒ์
๋๋ค.
์์ ํ์ ์คํฌ๋ฆฝํธ์์๋ ๋ง์ง๋ง ์ฝ๋๋ฅผ ์คํํ๋ ๋ฐฉ๋ฒ์ด ์กด์ฌํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๋คํธ์ํฌ ํธ์ถ๋ก๋ถํฐ ๋ฐ์์จ ๊ฐ์ผ๋ก ํจ์๋ฅผ ์คํํ๋ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค.
interface LightApiResponse {
lightSwitchValue: boolean;
}
async function setLight() {
const response = await fetch('/light');
const result: LightApiResponse = await response.json();
setLightSwitch(result.lightSwitchValue);
}
/light
๋ฅผ ์์ฒญํ๋ฉด ๊ทธ ๊ฒฐ๊ณผ๋ก LightApiResponse
๋ฅผ ๋ฐํํ๋ผ๊ณ ์ ์ธํ์ง๋ง, ์ค์ ๋ก ๊ทธ๋ ๊ฒ ๋๋ฆฌ๋ผ๋ ๋ณด์ฅ์ ์์ต๋๋ค. ํ์
์คํฌ๋ฆฝํธ์์๋ ๋ฐํ์ ํ์
๊ณผ ์ ์ธ๋ ํ์
์ด ๋ง์ง ์์ ์ ์์ต๋๋ค. ํ์
์ด ๋ฌ๋ผ์ง๋ ํผ๋์ค๋ฌ์ด ์ํฉ์ ๊ฐ๋ฅํ ํ ํผํด์ผ ํฉ๋๋ค. ์ ์ธ๋ ํ์
์ด ์ธ์ ๋ ์ง ๋ฌ๋ผ์ง ์ ์๋ค๋ ๊ฒ์ ๋ช
์ฌํด์ผ ํฉ๋๋ค.