
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๋ ๋ฐํ์์ ๊ฐ์ฒด์ ํ๋กํผํฐ๋ฅผ ์ ์ ์๋ ๊ฒฝ์ฐ์๋ง ์ฌ์ฉํด์ผํ๋ค.