TypeScript (11) ์ธ๋ค์ผํ ๋ฆฌ์คํธํ enum ์ฌ์ฉ์ ์ง์ํด์ผ ํ๋ ์ด์ enum์ JavaScript๋ก ์ด๋ป๊ฒ ๋ณํ๋ ๊น?TypeScript์ enum์ JavaScript์ ์๋ ๊ธฐ๋ฅ์ด๊ธฐ ๋๋ฌธ์, ์ปดํ์ผ ๊ณผ์ ์์ JavaScript๊ฐ ์ดํดํ ์ ์๋ ์ฝ๋๋ก ๋ณํ๋์ด์ผ ํ๋ค. ์ด๋ IIFE๊ฐ ์ฌ์ฉ๋๋ค.// TypeScript ์ฝ๋enum WeekDays { MON = "Mon", TUES = "Tues", WEDNES = "Wednes", THURS = "Thurs", FRI = "Fri",}// JavaScript๋ก ์ปดํ์ผ๋ ๊ฒฐ๊ณผvar WeekDays;(function (WeekDays) { WeekDays["MON"] = "Mon"; WeekDays["TUES"] = "Tues"; WeekDays["WEDNES"] = "Wednes"; Wee.. keyof typeof ์ฌ์ฉ๋ฒ keyof ํ์ ์ฐ์ฐ์keyof ์ฐ์ฐ์๋ ๊ฐ์ฒด ํ์ ์ ๋ชจ๋ ํค๋ฅผ ์ถ์ถํ์ฌ ๋ฌธ์์ด ๋๋ ์ซ์ ๋ฆฌํฐ๋ด ์ ๋์ธ ํ์ ์ ๋ง๋ญ๋๋ค.type Point = { x: number; y: number };type P = keyof Point; // P๋ "x" | "y" ํ์ ์ด ๋จ ์ธ๋ฑ์ค ์๊ทธ๋์ฒ๊ฐ ์๋ ๊ฒฝ์ฐ์ธ๋ฑ์ค ์๊ทธ๋์ฒ: ๊ฐ์ฒด์ ๋์ ์ธ ํค-๊ฐ ์์ ๋ํ ํ์ ๊ท์น์ ์ ์ํ๋ ๋ฌธ๋ฒ ๋ง์ฝ ๊ฐ์ฒด ํ์ ์ string ๋๋ number ์ธ๋ฑ์ค ์๊ทธ๋์ฒ๊ฐ ์๋ค๋ฉด keyof๋ ํด๋น ํค ํ์ ์ ๋ฐํํฉ๋๋ค.// 'number' ์ธ๋ฑ์ค ์๊ทธ๋์ฒ๋ฅผ ๊ฐ์ง ๊ฐ์ฒดtype Arrayish = { [n: number]: unknown };type A = keyof Arrayish; // A๋ number ํ์ ์ด ๋จ// 'string' ์ธ๋ฑ์ค.. Zod ๋ผ์ด๋ธ๋ฌ๋ฆฌ https://zod.dev/ GitHub - colinhacks/zod: TypeScript-first schema validation with static type inferenceTypeScript-first schema validation with static type inference - colinhacks/zodgithub.com Zod : TypeScript๋ฅผ ์ฐ์ ์ผ๋ก ๊ณ ๋ คํ ์คํค๋ง ์ ์ธ ๋ฐ ์ ํจ์ฑ ๊ฒ์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ด๋, "์คํค๋ง"๋ ๊ฐ๋จํ ๋ฌธ์์ด๋ถํฐ ๋ณต์กํ๊ฒ ์ค์ฒฉ๋ ๊ฐ์ฒด๊น์ง, ๋ชจ๋ ํํ์ ๋ฐ์ดํฐ ํ์ ์ ํฌ๊ด์ ์ผ๋ก ์ง์นญํ๋ ์ฉ์ด์ ๋๋ค. Zod๋ ๊ฐ๋ฐ์ ์นํ์ ์ธ ์ฌ์ฉ์ฑ์ ๋ชฉํ๋ก ์ค๊ณ๋์์ต๋๋ค. ์ค๋ณต๋ ํ์ ์ ์์ ๋ ๊ฒ์ด ํต์ฌ ๋ชฉํ์ ๋๋ค. Zod์์๋ ์ ํจ์ฑ ๊ฒ์ฌ๊ธฐ๋ฅผ ํ ๋ฒ ์ ์ธํ๋ฉด, ํด๋น ์คํค.. any์ unknown any ํ์ ์ด๋ค ํ์ ์ด๋ ํ์ฉํ๋ค๋ ์๋ฏธ๋ฅผ ๊ฐ์ง ํ์ ์ผ๋ก, TypeScript์ ํ์ ์ฒดํฌ๋ฅผ ์ฐํํ๋ ๋ฐฉ์์ผ๋ก ๋์ํ๊ณ ํ์ ์์ ์ฑ์ ์๊ฒ ๋ฉ๋๋ค.let anyVar: any = 10;anyVar = "hello";let num: number = 10;num = anyVar; any ํ์ ์ ๊ฐ์ ์ด๋ค ํ์ ์ผ๋ก ์ ์๋ ๋ณ์๋ ๋ฌธ์ ์์ด ๋ค ํ ๋นํ ์ ์์ด์ ์์ ์ฝ๋์ฒ๋ผ number ํ์ ์ ๋ณ์ num์ any ํ์ ์ ๊ฐ anyVar๋ฅผ ํ ๋นํด๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์์ต๋๋ค. any ํ์ ์ ๋ง์ด ์ฌ์ฉํ๋ฉด TypeScript์ ์ฅ์ ์ธ ํ์ ์์ ์ฑ์ด ์ฌ๋ผ์ง๋ฏ๋ก, ์ฌ์ฉ์ ์ง์ํ๊ณ ํ์ํ ๋๋ง ์ ์คํ ์ฌ์ฉํด์ผ ํฉ๋๋ค. unknown ํ์ ์์ง ํ์ ์ด ํ์ ๋์ง ์์๋ค๋ ์๋ฏธ๋ฅผ ๊ฐ์ง ํ์ ์ผ๋ก, any ํ์ ๊ณผ ๋น์ทํ์ง๋ง ๋ณด๋ค.. ํ์ ๋ณ์นญ, ์ธ๋ฑ์ค ์๊ทธ๋์ฒ, ์ด๊ฑฐํ ํ์ ํ์ ๋ณ์นญ(Type Alias) : ๋ณ์๋ฅผ ์ ์ธํ๋ฏ ํ์ ์ ๋ณ๋๋ก ์ ์ํ ์ ์์ต๋๋ค.type User = { id: number; name: string; nickname: string; birth: string; bio: string; location: string;}; ์์ ์ฝ๋๋ ํ์ ์ด๋ฆ์ User, ํ์ ์ผ๋ก๋ ์ฌ๋ฌ ๊ฐ์ ํ๋กํผํฐ๊ฐ ์๋ ๊ฐ์ฒด ํ์ ์ ์ ์ํ์ต๋๋ค.type User = { id: number; name: string; nickname: string; birth: string; bio: string; location: string;};let user: User = { id: 1, name: "y9s2n6", nickname: "ysqz6", birth: .. ๊ฐ์ฒด ๊ฐ์ฒด ํ์ ์ ์ ์ํ๋ ๋ฐฉ๋ฒ 1. object๋ก ์ ์ํ๊ธฐlet user: object = { id: 1, name: "y9s2n6"};user.id; // Property 'id' does not exist on type 'object'. user.id ์ฒ๋ผ ์ ํ๊ธฐ๋ฒ์ผ๋ก ๊ฐ์ฒด์ ํน์ ํ๋กํผํฐ์ ์ ๊ทผํ๋ ค๊ณ ํ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค. ์ค๋ฅ ๋ฉ์ธ์ง ๋ด์ฉ์ 'object' ํ์ ์ 'id' ํ๋กํผํฐ๊ฐ ์๋ค๊ณ ํฉ๋๋ค. ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ ์ด์ ๋ ํ์ ์คํฌ๋ฆฝํธ์ object ํ์ ์ ๋จ์ ๊ฐ์ด ๊ฐ์ฒด์์ ํํํ๋ ๊ฒ ์ธ์๋ ์๋ฌด๋ฐ ์ ๋ณด๋ ์ ๊ณตํ์ง ์๋ ํ์ ์ด๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ฐ๋ผ์ ์ด ํ์ ์ ๊ฐ์ฒด์ ํ๋กํผํฐ์ ๋ํ ์ ๋ณด๋ฅผ ์ ํ ๊ฐ์ง๊ณ ์์ง ์์ต๋๋ค. 2. ๊ฐ์ฒด ๋ฆฌํฐ๋ด ํ์ let user: { id: numbe.. ๋ฐฐ์ด๊ณผ ํํ ๋ฐฐ์ด// ์ซ์๋ฅผ ๋ด๋ ๋ฐฐ์ด์ ํ์ ์ ์ํ๊ธฐ let numArr: number[] = [1, 2, 3];let numArr: Array = [1, 2, 3];// ๋ฌธ์์ด์ ๋ด๋ ๋ฐฐ์ด์ ํ์ ์ ์ํ๊ธฐlet strArr: string[] = ["hello", "im", "y9s2n6"];let strArr: Array = ["hello", "im", "y9s2n6"]; ๋ฐฐ์ด์ ํ์ ์ ์ ์ํ๋ ๋ ํ์๋ฐฐ์ด์์ํ์ [] ํ์Array : ๊บฝ์ ์ ํจ๊ป ํ์ ์ ์์ฑํ๋ ๋ฌธ๋ฒ - ์ ๋ค๋ฆญ๋ค์ํ ํ์ ์์๋ฅผ ๊ฐ๋ ๋ฐฐ์ด ํ์ ์ ์ ์ํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผํ ๊น์? ์๊ดํธ์ | ๋ฅผ ์ด์ฉํด ๋ฐฐ์ด ์์๊ฐ ๋ ์ค ํ๋์ ํ์ ์ ํด๋นํ๋๋ก ํ์ ์ ์ ์ํ๋ฉด ๋ฉ๋๋ค.let multiArr: (number | string)[] = [1, "he.. ์์ํ์ ๊ณผ ๋ฆฌํฐ๋ดํ์ ๊ธฐ๋ณธ ํ์ (๋ด์ฅ ํ์ ) : ํ์ ์คํฌ๋ฆฝํธ๊ฐ ์์ฒด์ ์ผ๋ก ์ ๊ณตํ๋ ํ์ ์์ ํ์ : ๋ฑ ํ ๊ฐ์ ๊ฐ๋ง ์ ์ฅํ ์ ์๋ ํ์ + ์์ ํ์ ์ด ์๋ ๋ฐฐ์ด์ด๋ ๊ฐ์ฒด ๊ฐ์ ๋น ์์ ํ์ ๋ค์ ๋์์ ์ฌ๋ฌ ๊ฐ์ ๊ฐ๋ค์ ์ ์ฅํ ์ ์์ต๋๋ค. number ํ์ : ์ซ์๋ฅผ ์๋ฏธํ๋ ๋ชจ๋ ๊ฐ์ ํฌํจํ๋ ํ์ ์ ๋๋ค. ๋จ์ ์ ์๋ฟ๋ง ์๋๋ผ ์์, ์์, Infinity, NaN ๋ฑ์ ํน์ํ ์ซ์๋ค๋ ํฌํจํฉ๋๋ค.let num1: number = 123; let num2: number = -123; let num3: number = 0.123; let num4: number = Infinity; let num5: number = -Infinity; let num6: number = NaN; ์ฝ๋ก ๊ณผ ํจ๊ป ๋ณ์์ ํ์ ์ ์ ์ํ๋ ๋ฌธ๋ฒ์ ํ.. ์ด์ 1 2 ๋ค์