배열의 선언

const fruits: string[] = ['apple', 'banana', 'cherry'];
const fruits: Array<string> = ['apple', 'banana', 'cherry'];

불변 객체로 지정하는 방법

const fruits: readonly string[] = ['apple', 'banana', 'cherry'];
const fruits2: ReadonlyArray<string> = ['apple', 'banana', 'cherry'];
const fruits3 = ['apple', 'banana', 'cherry'] as const;

fruits.push('durian'); // 컴파일 에러

지원 함수

원본 배열 변경

arr.push('a'); // 끝에 요소 추가
arr.pop(); // 끝에서 제거

arr.unshift('a'); // 앞에 추가
arr.shift(); // 앞에서 제거

arr.splice(n, m); // n번째 인덱스부터 m개 제거 (원본 변경)

새 객체 반환(원본 유지)

arr.slice(n); // n번째 인덱스부터 끝까지 추출
arr.slice(-1 * n); // 뒤에서 n개 추출 
arr.slice(n, m); // n번째 인덱스부터 m개 추출

arr.concat(arr2); // arr와 arr2 병합
[...arr, ...arr2]; // 동일

내용물 변환

numbers.map(n => n * 2);           // 각 요소 변환

numbers.filter(n => n > 2);        // 조건에 맞는 요소만 추출

// reduce - 하나의 값으로 축약
numbers.reduce((sum, n) => sum + n, 0);  // 모든 요소의 합
numbers.reduce((max, n) => Math.max(max, n));  // 최댓값 하나만

// flatMap - map + flat
[[1, 2], [3, 4]].flatMap(arr => arr.map(n => n * 2)); // [2, 4, 6, 8]

튜플

고정된 길이를 가진, 서로 다른 타입을 저장할 수 있는 배열

// 위치마다 타입 지정 (런타임에 수정 불가)
const tp: [string, number] = ['age', 25];

// readonly로 불변 객체 지정
const rtp: readonly [string, number] = ['age', 25];

rtp[0] = 'hello'; // 컴파일 에러