๋ณธ๋ฌธ์œผ๋กœ ๋ฐ”๋กœ๊ฐ€๊ธฐ

 

1. Type Assertion

- ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ถ”๋ก ํ•˜์ง€ ๋ชปํ•˜๋Š” ํƒ€์ž…์„ as keyword๋ฅผ ํ†ตํ•ด ๋ช…์‹œํ•ด์ฃผ๋Š” ๊ฒƒ

- Type casting: ๋ฐ์ดํ„ฐ์˜ ํƒ€์ž…์„ ๋ณ€ํ™˜

- Type assertion: ๋ฐ์ดํ„ฐ์˜ ํƒ€์ž…์„ ๋ช…์‹œ

 

Type Assertion์˜ ๋‘ ๊ฐ€์ง€ ํ˜•ํƒœ

1. As

let someValue: unknown = 'this is a string';
let strLength: number = (someValue as string).length;

2. Angle Bracket

let someValue: unknown = "this is a string";
let strLength: number = (<string>someValue).length;

- JSX์—์„œ๋Š” ๊บพ์‡ ๊ด„ํ˜ธ๋ฅผ ํ†ตํ•œ Type Assertion์€ ํƒœ๊ทธ์™€ ํ˜ผ๋™๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ž˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.

 

ํƒ€์ž… ์„ ์–ธ vs ํƒ€์ž… ๋‹จ์–ธ

ํƒ€์ž… ๋‹จ์–ธ: as Penguin๋งŒ ๋ณด๊ณ  Penguin ํƒ€์ž…์œผ๋กœ ์ธ์‹ํ•˜์—ฌ, ๋นˆ ๊ฐ์ฒด์ž„์—๋„ ์—๋Ÿฌ๋ฅผ ๋ฑ‰์ง€ ์•Š์Œ

ํƒ€์ž… ์„ ์–ธ: ๊ฐ์ฒด ํ”„๋กœํผํ‹ฐ๋ฅผ ๋ชจ๋‘ ์ฑ„์šฐ๋„๋ก ๊ฐ•์ œํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‹ค์ˆ˜๋ฅผ ์ €์ง€๋ฅผ ์œ„ํ—˜์ด ๋‚ฎ์Œ

type Penguin = {
  walk: () => void;
  swimming: () => void;
};

const penguin = {} as Penguin;    // ํƒ€์ž… ๋‹จ์–ธ ๐Ÿ˜ซ

const penguin: Penguin = {        // ํƒ€์ž… ์„ ์–ธ
  walk() {
    console.log('๋’ค๋šฑ๋’ค๋šฑ');
  },
  swimming() {
    console.log('์Šˆ์šฑ');
  },
};

 

 

2. Index Signature

Javascript Index Signature

- ๊ฐ์ฒด์˜ ํŠน์ • value์— ์ ‘๊ทผํ•  ๋•Œ ๊ทธ value์˜ key๋ฅผ ๋ฌธ์ž์—ด๋กœ ์ธ๋ฑ์‹ฑํ•ด ์ฐธ์กฐํ•˜๋Š” ๋ฐฉ๋ฒ•

- value์˜ key์ธ ‘breed’ ๋ฌธ์ž์—ด๋กœ ๊ฐ์ฒด์˜ value ‘puddle’์— ์ ‘๊ทผ

const dog = {
  breed: 'puddle',
  name: 'Kumuri',
  bark: () => console.log('๋ฉ๋ฉ'),
};

dog['breed'];

Typescript Index Signature

- TypeScript Index Signature: ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ์ธ๋ฑ์Šค ์‹œ๊ทธ๋‹ˆ์ฒ˜์— ๋Œ€ํ•œ ํƒ€์ž…์„ ์ง€์ •ํ•ด์ฃผ๋Š” ๊ฒƒ

- ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ๋“ค์„ ๋ช…ํ™•ํžˆ ์•Œ ์ˆ˜ ์—†์„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

type ArrStr = {
  [key: string]: string | number;
  [index: number]: string;
  
  // [field: string]: string; 
  // Duplicate index signature for type 'string'
  
};

const a: ArrStr = {};
a['str'];

- key: ์ž๋ฆฌ ํ‘œ์‹œ ์šฉ๋„. ์ด๋ฆ„์€ ์–ด๋–ป๊ฒŒ ์ง“๋“  ์ƒ๊ด€์—†๋‹ค.

- key๊ฐ€ string์ธ ์ธ๋ฑ์Šค ์‹œ๊ทธ๋‹ˆ์ฒ˜๋Š” ํ•˜๋‚˜๋งŒ ์กด์žฌ ๊ฐ€๋Šฅํ•˜์—ฌ, filed๋ฅผ ํ•œ ๋ฒˆ ๋” ์ •์˜ํ•˜๋ ค๊ณ  ํ•˜๋ฉด ํƒ€์ž… ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

- empty object์ผ ๋•Œ ์ธ๋ฑ์Šค ์‹œ๊ทธ๋‹ˆ์ฒ˜๋กœ ์ฐธ์กฐํ•˜๋ ค ํ•ด๋„ ํƒ€์ž… ์—๋Ÿฌ๊ฐ€ ๋‚˜์ง€ ์•Š๋Š”๋‹ค.

- key๋งˆ๋‹ค ๋‹ค๋ฅธ ํƒ€์ž…์„ ๊ฐ€์งˆ ์ˆ˜ ์—†์Œ (key ํƒ€์ž…์ด string ์ด๋ฉด, ๋ฌด์กฐ๊ฑด string ๋˜๋Š” number ํƒ€์ž…

- ํƒ€์ž…์— ์œ ์—ฐํ•จ์„ ์ œ๊ณตํ•˜๋Š” ๋Œ€์‹  ํ‚ค ์ด๋ฆ„์„ ์ž˜๋ชป์“ฐ๋Š” ๋“ฑ์˜ ํœด๋จผ ์—๋Ÿฌ๋ฅผ ๋ฒ”ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ Index signature๋Š” ๋Ÿฐํƒ€์ž„์— ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ๋ฅผ ์•Œ ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ์—๋งŒ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค.

๋ฐ˜์‘ํ˜•