TypeScript/ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ TypeScript

[ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ] ์ œ๋„ค๋ฆญ ํƒ€์ž… ๋ณ„์นญ

Rainbow๐ŸŒˆCoder 2022. 4. 21. 13:26
728x90
type MyEvent<T> = {
  target: T;
  type: string;
};

type ButtonEvent = MyEvent<string>;

let myEvent: MyEvent<string | null> = {
  target: "ํ™๊ธธ๋™์ด๋ฒคํŠธ",
  type: "click",
};

type TimedEvent<T> = {
  event: MyEvent<T>;
  from: Date;
  to: Date;
};

function trggerEvent<T>(event: MyEvent<T>): void {
  console.log(event);
}

trggerEvent({
  target: "ํ™ฉ์ง„์ด์ด๋ฒคํŠธ",
  type: "mouseover",
});
 
์ œ๋„ค๋ฆญ ํƒ€์ž… ๋ณ„์นญ : ํƒ€์ž… ๋ณ„์นญ๊ณผ ํ• ๋‹น ๊ธฐํ˜ธ(=) ์‚ฌ์ด์—๋งŒ ์ œ๋„ค๋ฆญ ํƒ€์ž…์„ ์„ ์–ธํ•  ์ˆ˜ ์žˆ๋‹ค.
type MyEvent<T> = {
target: T;
type: string;
};
 
 
 ์•„๋ž˜์™€ ๊ฐ™์ด ํ• ๋‹น ๊ฐ€๋Šฅ
;
type ButtonEvent = MyEvent<'HTMLButtonElement'>;

 
๋‹ค๋งŒ ์ œ๋„ค๋ฆญ ํƒ€์ž… ๋ณ„์นญ์—์„œ ํƒ€์ž…์ด ์ž๋™ ์ถ”๋ก ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ํƒ€์ž… ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ํ•œ์ •ํ•ด์•ผ ํ•œ๋‹ค.
let myEvent: MyEvent<string | null> = {
target: "ํ™๊ธธ๋™์ด๋ฒคํŠธ",
type: "click",
};
 
๊ทธ๋ฆฌ๊ณ  ๋‹ค๋ฅธ ํƒ€์ž…์„ ๋งŒ๋“ค ์ˆ˜๋„ ์žˆ๋‹ค.
์ด๋ ‡๊ฒŒ ๋˜๋ฉด ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” T๋ฅผ ์—ฐ๊ฒฐ์ง€์–ด ์ ์šฉ์‹œํ‚จ๋‹ค.
 
type TimedEvent<T> = {
event: MyEvent<T>;
from: Date;
to: Date;
};โ€‹
 
์ œ๋„ค๋ฆญ ํƒ€์ž… ๋ณ„์นญ์„ ํ•จ์ˆ˜ ์‹œ๊ทธ๋‹ˆ์ฒ˜์—์„œ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” ๊ตฌ์ฒดํƒ€์ž… T๋กœ ํ•œ์ •ํ•˜๋ฉด์„œ ๋™์‹œ์— MyEvent์—๋„ ์ ์šฉํ•œ๋‹ค.
function trggerEvent<T>(event: MyEvent<T>): void {
console.log(event);
}

trggerEvent({
target: "ํ™ฉ์ง„์ด์ด๋ฒคํŠธ",
type: "mouseover",
}); //{ target: 'ํ™ฉ์ง„์ด์ด๋ฒคํŠธ', type: 'mouseover' }

 

728x90