๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
typescript

*.d.ts & ์œ ํ‹ธํ•จ์ˆ˜(Record / Omit)

by frontChoi 2025. 9. 11.
๋ฐ˜์‘ํ˜•

๐Ÿš•*.d.ts

TypescriptํŒŒ์ผ์—์„œ JSํŒŒ์ผ์„ ํ˜ธ์ถœํ•  ๊ฒฝ์šฐ ํƒ€์ž…์„ ์ฝ์ง€ ๋ชปํ•˜๋ฏ€๋กœ, Typscript์—๊ฒŒ JSํŒŒ์ผ์˜ ํƒ€์ž…์˜ ๋Œ€ํ•ด ์„ค๋ช…์„ ํ•ด์ค˜์•ผ ํ•˜๋Š” ์—ญํ• ์ด๋‹ค. ์ด๋ ‡๊ฒŒ ์„ค๋ช… ๋˜์–ด ์žˆ๋Š” ํŒŒ์ผ์„ Declaration File ์ด๋ผ๊ณ  ํ•œ๋‹ค

 

์˜ˆ์‹œ

musicPlay.ts ๋ผ๋Š” ํŒŒ์ผ์—์„œ playMusic๋ผ๋Š” ํ•จ์ˆ˜๊ฐ€ ์žˆ๊ณ , date.js์˜ isPlayOk๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์žฌ์ƒํ•˜๋Š” ํ•จ์ˆ˜๊ฐ€ ์žˆ๋‹ค

 

musicPlay.ts

import { isPlayOK } from "@/utils/date";

function playMusic(url: string, date: string): boolean {
  // ์™ธ๋ถ€ JS ํ˜ธ์ถœ
  isPlayOK(date);
  return true;
}

export {};

 

date.js

function isPlayOK(date) {
  // ๋ณต์žกํ•œ๊ณ„์‚ฐ ํ›„ true / false ๋ฆฌํ„ด
  return true;
}

export { isPlayOK };

 

์•„๋ž˜์™€ ๊ฐ™์ด jsํŒŒ์ผ์„ ํ˜ธ์ถœํ•˜๋Š” ๊ณณ์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค

๊ฒฐ๊ตญ์€ jsํŒŒ์ผ์—์„œ ์ด์Šˆ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฏ€๋กœ, js์— ๋Œ€ํ•œ Declaration File์ด ํ•„์š”ํ•˜๋‹ค

 

global.d.ts

declare module "@/utils/date" {
  declare function isPlayOK(data: string): boolean;
}

์œ„์™€ ๊ฐ™์ด date.js์˜ isPlayOk์— ๋Œ€ํ•ด ํƒ€์ž…์— ๋Œ€ํ•ด ๋ฏธ๋ฆฌ ์ •์˜ ํ•ด๋‘”๋‹ค.

๋‹ค๋งŒ ์œ„ ํŒŒ์ผ ์ž‘์„ฑ์‹œ์—๋Š” jsํŒŒ์ผ์— ๋Œ€ํ•œ **“์ •ํ™•ํ•œ ๊ธฐ๋Šฅ์ด๋‚˜, ๋ฆฌํ„ดํƒ€์ž…“**์— ๋Œ€ํ•ด ์ธ์ง€๋ฅผ ํ•˜๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค

 

 

 

Record

Key,Valueํ˜•ํƒœ ์ด๋ฉฐ, Key,value์— ํƒ€์ž…์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค

interface PageValue {
  title: string;
}

type PageKey = "home" | "about" | "contact";
const nav: Record<PageKey, PageValue> = {
  contact: { title: "t1" },
  about: { title: "t2" },
  home: { title: "t3" },
};

 

 

Omit

Type์—์„œ ์›ํ•˜๋Š” ํ‚ค ๊ฐ’์„ ์ œ๊ฑฐํ•˜๋Š” ๊ธฐ๋Šฅ

 

// Omit
// Type์—์„œ ์›ํ•˜๋Š” ํ‚ค ๊ฐ’์„ ์ œ๊ฑฐํ•˜๋Š” ๊ธฐ๋Šฅ
interface Person {
  name: string;
  age: number;
  country: string;
  gender: "m" | "w";
  likefood: string;
}

type KoreaPerson = Omit<Person, "likefood">;
// name,age,country,gender
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€