Tuple 타입
let 멍멍: (string | boolean)[] = ["dog", true]; //union타입
let 야옹: [string, boolean] = ["cat", true]; //tuple타입
let 야옹2: [boolean, string] = ["cat", true]; //tuple타입 에러발생
[ ] 괄호 안에 타입을 적으면 tuple 타입이 된다.
첫 자료는 string, 둘째 자료는 boolean 타입처럼
위치까지 구체적으로 지정하려면 tuple을 사용하면 된다.
=> 예시를 보면 야옹 2는 자료위치와 타입선언이 맞지 않아 에러가 발생한 것.
Tuple + rest parameter 문법
function 함수(...x: [number, string]) {
console.log(x);
}
함수(20, "hong");
함수("hong",20); //에러
rest 파라미터 : Tuple타입으로 선언을 할 수도 있다.
Tuple + ? 연산자
type Num = [number, number?, number?];
let 변수1: Num = [10];
let 변수2: Num = [10, 20];
let 변수3: Num = [10, 20, 10];
type변수에도 물론 Tuple을 사용할 수 있다.
그런데? 연산자의 의미는 무엇일까?
=> 파라미터?을 사용하게 되면 그 파라미터는 옵션이라는 의미다.
입맛대로 오버로딩하여 함수를 호출할 수 있다.
- 하지만,
type Num = [number, number?, number];
이처럼 가운데만?를 사용하는 것은 문법에 어긋난다.
왜냐하면 두번째를 건너뛰고, 세 번째 파라미터를 호출하는 방법은 없기 때문이다.
=> 끝에 있는 파라미터부터 ?연산자를 적용할 수 있다.
Tuple + spread operator 문법
let arr = [1, 2, 3];
let arr2: [number, number, ...number[]] = [4, 5, ...arr];
[ ] 튜플 안에 spread operator 문법를 통해 타입을 지정할 수도 있다.
Tuple + rest parameter + spread operator 문법
function 함수(...x: [number, string, ...number[]]) {
console.log(x);
}
함수(1, "2", 3);
함수(1, "2", 3, 4);
함수(1, "2", 3, 4, 5);
두 문법을 모두 사용한다면,
타입의 위치를 엄격하게 정하고
입맛대로 오버로딩까지 가능하다.
파이썬에서 Tuple이랑은 조금 다른 개념인 것 같다.
위치까지 엄격하게 정할 수 있다는 장점이 있으나, 이렇게 사용할 때가 있을지 궁금하다.
타입스크립트 세계관은 정말 넓은 것 같다... 끝이 없어!!
'TypeScript' 카테고리의 다른 글
d.ts 타입 정리 파일 (0) | 2023.07.04 |
---|---|
Ambient Module + declare (0) | 2023.07.04 |
Redux toolkit (0) | 2023.07.04 |
React + TypeScript 타입지정 (0) | 2023.07.04 |
타입을 파라미터로 입력하려면? Generic 문법 (0) | 2023.07.04 |