Tuple type
Tuple 은 타입스크립트에서 고정된 수의 요소를 가지면서, 각 요소의 타입이 명시적으로 지정된 배열의 타입이다.
각 요소의 타입은 다를 수 있고, 배열의 길이는 고정된다.
예를 들어 첫번째 요소가 문자열이고, 두번째 요소가 숫자인 배열을 정의하고 싶다면 다음과 같이 작성할 수 있다.
let exampleTuple: [string, number] = ['hello', 42];
Tuple 응용 : Rest Parameters
함수의 매개변수로 '...' (rest 연산자)를 사용하면 인자를 배열로 받을 수 있다.
이 기능을 tuple 이랑 결합해보자.
예를 들어 첫번째 인자는 문자열이고, 두번째 인자는 숫자여야 하는 경우에 다음과 같이 작성할 수 있다.
args 라는 배열에 string 타입의 인자와 number 타입의 인자가 각각 들어감을 알 수 있다.
function myFunction(...args: [string, number]) {
console.log(args);
}
Optional Tuple Elements
Tuple 에서 어떤 요소는 선택적일 수 있다(옵션)
이를 위해서는 타입 뒤에 '?' 를 붙여 optional 임을 표시한다.
type OptionalTuple = [number, string?, boolean?];
예를 들어 위 예제에서 첫 번째 요소로 number 를 필요로하고,
string 과 boolean 은 필수는 아니다.
Tuple과 Spread 연산자
Tuple 타입에 '...' 와 같은 spread 연산자를 사용해서, 배열의 나머지 부분이 특정 타입의 요소를 0개이상 포함함을 나타낼 수 있다.
예를 들어 다음과 같다.
let numbers: [number, number, ...number[]] = [1, 2, 3, 4, 5];
첫번째 요소와 두번째 요소가 number 타입이고, 나머지 요소는 number 타입의 배열이 될 수 있다.
예제
만약에 다음과 같은 자료가 있다고 가정하자
let arr = ['동서녹차', 4000, true, false, true, true, false, true]
몇 개 인지는 모르지만, boolean 값들이 3번째 자료부터 많이 들어올 수 있다고 해보자
tuple 타입과 spread 연산자를 사용해 타입지정을 해본다면 다음과 같다.
type Arr = [string, number, ...boolean[]]
let arr :Arr = ['동서녹차', 4000, true, false, true, true, false, true];
arr 는 Arr 이라는 타입을 가진다.
이 타입은 첫번째 요소로 string, 두번째 요소로 number, 그리고 boolean 타입의 배열이 될 수 있다.
ref: 코딩애플, TypeScript 공식 문서