๐ถ Array vs Tuple
Array
const strArr: string[] = ['apple', 'kiwi'];
const numArr: Array<number> = [1, 2, 3];
- ์์ ๊ฐ์ด ๋ฐฐ์ด์ ํ์
์ ์ง์ ํด์ ์ ์ํ ๋ ๋ ๊ฐ์ง ๋ฐฉ์์ผ๋ก ํ ์ ์๋ค.
function printArr(arr: ***readonly*** string[]) {
// arr.push ๊ฐ์ ๊ฒ๋ค ๋ถ๊ฐ๋ฅ
}
// readonly ์ต์
์ ์ค ๋๋ Generic ์ฌ์ฉ ๋ถ๊ฐ๋ฅ
function printArr(arr: ***readonly*** ~~Array<number>~~) {
}
- ์ ๋ฌ๋ ์ธ์๋ฅผ ํจ์ ๋ด๋ถ์์ ๋ณ๊ฒฝํ์ง ์๊ฒ ํ๊ณ ์ถ์ ๋
readonly
๋ผ๋ ์ต์
์ ์ค์ ํ์
์ผ๋ก ๋ณด์ฅ์ด ๊ฐ๋ฅํ๋ค. ๋ง ๊ทธ๋๋ก ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ์๋ง ์๊ฒ ๋๋ค.
- ๋ถ๋ณ์ฑ์ ์ ์งํ๊ธฐ ์ํด readonly๊ฐ ๋ง์ด ์ฐ์ธ๋ค.
- readonly ์ต์
์ ์ค ๋๋ ๋ฐฐ์ด์ generic ํ์
์ผ๋ก ์ค์ ํ ์ ์๋ค. ๊ทธ๋์ ์ผ๊ด์ฑ ์๋ ์ฝ๋๋ฅผ ์ง๊ธฐ ์ํด์๋ string[] ๊ณผ ๊ฐ์ ์์ผ๋ก ์์ฑํ๋ ๊ฒ ๋ซ๋ค.
Shadowed variable
- ์ ๋ฌ๋ ์ธ์์ ์ด๋ฆ์ ํจ์ ๋ด์์ ๋ก์ปฌ ๋ณ์๋ก ๋ค์ ๋ฎ์ด ์์ฐ๋ ๊ฒ
- ์ํํ๊ธฐ ๋๋ฌธ์ ํ์ง ์๋ ๊ฒ์ด ์ข์
function printArr(arr: ***readonly*** string[]) {
arr[0] = 'papaya'; // Index signature in type 'readonly string[]' only permits reading.ts(2542)
}
function printArr(arr: ***readonly*** string[]) {
arr = ['SHADOW']; // ์๋ฌ ์ ๋ธ
}
- TS config๋ก ๋ฐฉ์งํ ์ ์๋ ๋ฐฉ๋ฒ์ ์์
- ESLint์ ๊ฐ์ ํด๋ก ์ปดํ์ผ ๋ ๋ฐฉ์งํ ์ ์์
Tuple
- JavaScript์ ์๋ ํ์
- ์๋ก ๋ค๋ฅธ ํ์
์ด๋ฉด์ ๊ณ ์ ๋ ๊ฐ์๋งํผ element๋ฅผ ๋ด์ ์ ์๋ ๋ฐฐ์ด
- ๋ถ๋ณํ๋ ๊ตฌ์กฐ, ํน์ ์์๋ ํจํด์ผ ๋ ์ ์ฉ
type rgb = number | string;
const rgbColor1: [rgb, rgb, rgb] = [255, 0, 255];
const rgbColor2: [rgb, rgb, rgb] = ['FF', 'FF', '00'];
- ํํ์ ํ์
์ ์๋ตํ ์ ์๊ณ ์๋ตํ๋ฉด ํ ๋น๋ ๊ฐ์ผ๋ก ํ์
์ด ์ ์๋๋ค.
- ๊ฐ์ฒด๋ณด๋จ ๊ฐ๊ฒฐํ์ง๋ง, ๊ฐ์ฒด๋งํผ โ์์ฒด ๋ฌธ์ํโ ๋์ง ์๋๋ค. โ ์๊ณ ๋ช
๋ฐฑํ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ์ ํฉ
- ๋ฐฐ์ด ๋ด์ฅ ํจ์๋ค์ ์ฌ์ฉํ ์ ์์ง๋ง ๊ฐ์ ์ถ๊ฐํ๊ฑฐ๋ ๋ณ๊ฒฝํ ๋ ์ฒ์ ํ ๋น๋ ๊ฐ์ ํ์
๋ง ํ์ฉํ๋ค.
const person: [string, number] = ['Millie', 391];
person[0] // Millie
person[1] // 391
// destructuring
const [name, age] = person;