Skip to Content
Sunbeen's Blog
Documents๊ตฌ TypescriptBasic_Grammer02. ๐ŸŸฆ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์‹ค์ „ ํ™œ์šฉ ์˜ˆ์ œ ์ •๋ฆฌ

02. ๐ŸŸฆ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์‹ค์ „ ํ™œ์šฉ ์˜ˆ์ œ ์ •๋ฆฌ

  1. ๋นˆ ๋ฐฐ์—ด์˜ ํƒ€์ž…: never[]

๐Ÿ“Œ 1. ๋นˆ ๋ฐฐ์—ด์˜ ํƒ€์ž…: never[]

  • ์ดˆ๊ธฐ๊ฐ’ ์—†์ด ์„ ์–ธํ•œ ๋นˆ ๋ฐฐ์—ด์€ ํƒ€์ž…์ด never[]๋กœ ์ถ”๋ก ๋จ.
  • ์ดํ›„ array.push(โ€œhelloโ€)๋ฅผ ํ•˜๋ฉด ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” โ€œhelloโ€์˜ ํƒ€์ž…์„ ๊ธฐ์ค€์œผ๋กœ ๋ฐฐ์—ด์„ ์ž๋™์œผ๋กœ string[] ๋“ฑ์œผ๋กœ ์ถ”๋ก ํ•จ.
  • ํ•˜์ง€๋งŒ ๊ฐ€๋Šฅํ•˜๋ฉด ์ดˆ๊ธฐ ํƒ€์ž…์„ ๋ช…ํ™•ํžˆ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ด ์•ˆ์ „
const array = []; array.push("hello"); const array: string[] = [];

๐Ÿ“Œ 2. querySelector์™€ DOM ์š”์†Œ ํƒ€์ž…

์ฆ‰, ์„ ํƒ์ž๊ฐ€ DOM์— ์—†์„ ์ˆ˜๋„ ์žˆ๋‹ค๋Š” ์ ์„ ๊ณ ๋ คํ•ด์•ผ ํ•จ โ†’ ์กฐ๊ฑด๋ฌธ์œผ๋กœ null ์ฒดํฌ ํ•„์š”

const head: Element = document.querySelector("#head") document.querySelector๋Š” ๋ฆฌํ„ด ํƒ€์ž…์ด Element | null

โ—์ฃผ์˜: Non-null ๋‹จ์–ธ ์—ฐ์‚ฐ์ž !

  • !๋Š” โ€œ์ ˆ๋Œ€ null ์•„๋‹˜โ€์„ ๊ฐ•์ œ๋กœ ์„ ์–ธํ•˜๋Š” ๋ฐฉ์‹.
  • ํ•˜์ง€๋งŒ ์‹ค์ œ null์ผ ๊ฒฝ์šฐ ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ ๋ฐœ์ƒ ๊ฐ€๋Šฅ โ†’ โŒ ์ถ”์ฒœํ•˜์ง€ ์•Š์Œ
if (head) { head.innerHTML = "hello world"; }
const head2: Element = document.querySelector("#head")!;

๐Ÿ“Œ 3. ์›์‹œ ํƒ€์ž… vs ์›์‹œ ๋ž˜ํผ ํƒ€์ž…

์›์‹œ ํƒ€์ž… (Primitive Type) ์ด๋ž€?

์›์‹œ ํƒ€์ž…์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ๊ฐ€์žฅ ๊ธฐ๋ณธ์ด ๋˜๋Š” ๋ฐ์ดํ„ฐ ํƒ€์ž…์œผ๋กœ, ๊ฐ’ ์ž์ฒด๋ฅผ ์ €์žฅํ•˜๊ณ  ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€๋Šฅ(immutable) ํ•œ ์„ฑ์งˆ์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค.

์›์‹œํƒ€์ž… ์„ค๋ช…
string๋ฌธ์ž์—ด (โ€œhelloโ€)
number์ˆซ์ž (42, 3.14)
boolean๋ถˆ๋ฆฌ์–ธ (true, false)
null๊ฐ’์ด ์—†์Œ
undefined์ •์˜๋˜์ง€ ์•Š์Œ
bigintํฐ ์ •์ˆ˜ (123n)
symbol์œ ์ผํ•œ ๊ฐ’ ์‹๋ณ„์ž (Symbol(โ€œidโ€))

string (์›์‹œ ํƒ€์ž…)

  • string์€ **์›์‹œ ํƒ€์ž…(primitive type)**์œผ๋กœ, ๊ฐ’ ์ž์ฒด๊ฐ€ ๋ฌธ์ž์—ด์ž„
  • ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์ด ์ข‹๊ณ , ๋น„๊ต๋„ ๊ฐ’ ์ž์ฒด๋กœ ํ•จ (===๋กœ ๋น„๊ต ์‹œ ์ •ํ™•ํ•จ)
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์ž„์‹œ๋กœ String ๊ฐ์ฒด๋กœ ๊ฐ์‹ธ๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”์„œ๋“œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  • โœ… ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” ํ•ญ์ƒ ์ด๊ฑธ ์‚ฌ์šฉ

String (์›์‹œ ๋ž˜ํผ ํƒ€์ž…)

  • String์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋ž˜ํผ ๊ฐ์ฒด(wrapper object)
  • ๋‚ด๋ถ€์ ์œผ๋กœ ๋ฌธ์ž์—ด์„ ๊ฐ์‹ผ ๊ฐ์ฒด(Object) ํ˜•ํƒœ๋กœ ๋™์ž‘
  • typeof b๋ฅผ ์ฐ์œผ๋ฉด โ€œobjectโ€๋กœ ๋‚˜์˜ด
  • ๐Ÿšซ b === โ€œhellโ€ ์€ false โ€” ๊ฐ’์ด ์•„๋‹Œ ๊ฐ์ฒด๋ฅผ ๋น„๊ตํ•˜๊ธฐ ๋•Œ๋ฌธ
  • โ— ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์—์„œ String, Number, Boolean์€ ์ง€์–‘ (ํ˜ผ๋™, ๋น„๊ต ์˜ค๋ฅ˜ ๋ฐœ์ƒ ๊ฐ€๋Šฅ์„ฑ ๋†’์Œ)
const a: string = "hello" const b: String = new String("hello") console.log(typeof a) // "string" console.log(typeof b) // "object" console.log(a === b) // false string์€ ๊ธฐ๋ณธ ํƒ€์ž…(primitive)

๐Ÿ“Œ 4. ๋ฌธ์ž์—ด ๋ฆฌํ„ฐ๋Ÿด ํƒ€์ž… & ํ…œํ”Œ๋ฆฟ ๋ฆฌํ„ฐ๋Ÿด ํƒ€์ž…

๋ฌธ์ž์—ด ๋ฆฌํ„ฐ๋Ÿด ํƒ€์ž… (String Literal Type)

  • World๋Š” ๋ฌธ์ž์—ด ๋ฆฌํ„ฐ๋Ÿด ์œ ๋‹ˆ์˜จ ํƒ€์ž…
  • World๋Š” โ€œworldโ€ ๋˜๋Š” โ€œhellโ€ ๋‘ ๊ฐ’ ์ค‘ ํ•˜๋‚˜๋งŒ ํ—ˆ์šฉ
// ๋ฌธ์ž์—ด ๋ฆฌํ„ฐ๋Ÿด ํƒ€์ž… type hello = "hello"; // ๋ฌธ์ž์—ด ์œ ๋‹ˆ์˜จ ๋ฆฌํ„ฐ๋Ÿด ํƒ€์ž… type World = "world" | "hell"; const z: World = "world"; const x: World = "heaven"; // โŒ ์˜ค๋ฅ˜

ํ…œํ”Œ๋ฆฟ ๋ฆฌํ„ฐ๋Ÿด ํƒ€์ž… (Template Literal Type)

  • Greeting์€ template literal type์„ ์‚ฌ์šฉํ•˜์—ฌ โ€œhello worldโ€ ๋˜๋Š” โ€œhello hellโ€์ฒ˜๋Ÿผ ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋จ
  • ์ด ๋ฐฉ์‹์€ ์ •ํ˜•ํ™”๋œ ๋ฌธ์ž์—ด ๊ฐ’์„ ๊ฐ•๋ ฅํ•˜๊ฒŒ ํƒ€์ž…์œผ๋กœ ์ œํ•œํ•  ๋•Œ ์œ ์šฉ
  • โœ… Ctrl + Space ๋กœ ๊ฐ€๋Šฅํ•œ ๋ฌธ์ž์—ด ์ž๋™์™„์„ฑ ํžŒํŠธ๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ์Œ
type Greeting = `hello ${World}`; const te: Greeting = ""; // ์ž๋™์™„์„ฑ ์ถ”์ฒœ ๊ฐ€๋Šฅ: "hello world" | "hello hell"

๐Ÿ“ฆ ์‹ค์ „ ์˜ˆ์ œ

type HTTPMethod = "GET" | "POST"; type Endpoint = "users" | "posts"; type APIRoute = `${HTTPMethod} /api/${Endpoint}`; const route1: APIRoute = "GET /api/users"; // โœ… const route2: APIRoute = "POST /api/posts"; // โœ… const route3: APIRoute = "DELETE /api/users"; // โŒ Error

๐Ÿ“Œ 5. ํŠœํ”Œ(Tuple)์—์„œ ์ฃผ์˜ํ•  ์ 

  • ํŠœํ”Œ์€ ๊ณ ์ •๋œ ๊ธธ์ด์™€ ์ˆœ์„œ, ํƒ€์ž…์„ ๊ฐ€์ง„ ๋ฐฐ์—ด์ด์ง€๋งŒ,

  • push๋Š” ๋Ÿฐํƒ€์ž„ ๋ ˆ๋ฒจ์—์„œ ๋ง‰ํžˆ์ง€ ์•Š์Œ

  • ํƒ€์ž… ์•ˆ์ „์„ฑ์„ ๋†’์ด๋ ค๋ฉด as const ๋˜๋Š” ํŠœํ”Œ์„ ์กฐ์ž‘ํ•˜์ง€ ์•Š๋„๋ก ์„ค๊ณ„ ํ•„์š”

  • ์˜ค๋ฅ˜ ๋ฐœ์ƒ -ํŠœํ”Œ์€ ๊ธธ์ด๊ฐ€ ๊ณ ์ •๋จ

  • ๋ง‰ํžˆ์ง€ ์•Š์Œ -์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋™์ž‘์ƒ ํ—ˆ์šฉ๋จ

const tuple: [string, number] = ["1", 1]; tuple[2] = "hello"; tuple.push("hello");
ํ•ญ๋ชฉ์„ค๋ช…
๋นˆ ๋ฐฐ์—ด์˜ ํƒ€์ž…์ดˆ๊ธฐ์—๋Š” never[]๋กœ ์ถ”๋ก ๋˜๋ฉฐ, push ํ›„ ํƒ€์ž… ๊ฒฐ์ •๋จ
querySelector๋ฆฌํ„ด ํƒ€์ž…์ด Element or null, ์กฐ๊ฑด๋ฌธ์œผ๋กœ null ์ฒดํฌ ํ•„์š”
Non-null ๋‹จ์–ธ !null์ด ์•„๋‹˜์„ ๊ฐ•์ œ๋กœ ๋ณด์žฅํ•˜๋‚˜, ๋Ÿฐํƒ€์ž„ ์˜ค๋ฅ˜ ์œ„ํ—˜ ์žˆ์Œ
string vs Stringstring์€ ๊ธฐ๋ณธ ํƒ€์ž…, String์€ ๊ฐ์ฒด โ†’ string๋งŒ ์‚ฌ์šฉ
๋ฆฌํ„ฐ๋Ÿด ์œ ๋‹ˆ์˜จ ํƒ€์ž…โ€worldโ€ or โ€œhellโ€ ์ฒ˜๋Ÿผ ๊ฐ’ ์ž์ฒด๋ฅผ ํƒ€์ž…์œผ๋กœ ์ œํ•œ ๊ฐ€๋Šฅ
ํ…œํ”Œ๋ฆฟ ๋ฆฌํ„ฐ๋Ÿด ํƒ€์ž…hello ${World}์ฒ˜๋Ÿผ ๋ฌธ์ž์—ด ์กฐํ•ฉ์„ ํƒ€์ž…์œผ๋กœ ์ƒ์„ฑ
ํŠœํ”Œ์˜ push ๋ฌธ์ œํŠœํ”Œ์€ ๊ณ ์ •๋œ ๊ธธ์ด์ด๋‚˜, push๋Š” ๋ง‰ํžˆ์ง€ ์•Š์Œ โ†’ ์ฃผ์˜ ํ•„์š”
Last updated on