[ Typescript ] - array의 이모저모 타입지정

최문길·2023년 12월 23일
0

Typescript

목록 보기
19/23


array 자료에 타입을 지정 할 때 string [ ] 과 같이 지정하는데

이보다 더 구체적이게

음 ... literal type 과 같이 지정할 수 가 있다 .

Tuple Type


tuple type은 array에 붙일 수 있는 타입이다.
자료의 위치와 타입까지 정확히 지정할 수 있는 타입이다.

let tuple : [string,boolean]

tuple = ['string',false] // 가능
tuple = [false, 'string ] // 불가능



아니면 literal type 처럼 지정 할 수 있다 .

type tuple = [1,'string']

let arr : tuple = [1,'string']; // 가능
let arr : tuple = ['1',asdf] // 불가능




rest parameter : Tuple 응용



function fn (...x :[string, number]) { console.log(x) }

fn('kim',123) // 가능

// rest 파라미터에서 배열자체 타입을 2개만 들어갈수 있습니다. 라고 정의했기에
fn('kim',123,456) 

fn('kim','park')// 불가

이렇게 rest parameter를 엄격하게 사용가능하다.
일반 파라미터 2개 넣는 것과 기능상 다를 바는 없는데

차이는 rest parameter 쓰시면 파라미터가 전부 array에 담겨서 오는게 차이일 뿐이다.




tuple 안에도 옵션 가능



type Num = [number, number?, number?];

let arr :  Num = [10]// 가능
let arr2 : Num = [10,20]; // 가능
let arr3 : Num = [10,20,30]; // 가능
let arr4 : Num = [10,20,30,40]; // 에러

type Num2 = [number, number?, number] // 이건 말 안되는것 알지?



Spread - array 두개를 spread 연산자로 합치는 경우 타입지정은?



let arr = [1,2,3];
let arr2 = [4,5 ...arr];

arr2 타입지정은 어떻게 해야 할까?

Tuple 타입으로!!!
arr 자리에 자료 몇개가 들어올지 모르는 상황에서



let arr2 :[number, number, ...number[]] = [4,5,6,7,8,9,10] 

이렇게 rest parameter 처럼 맘껏 집어넣을 수 있다.




Object의 rest-parameter는??



interface O {
  name: string,
  age: number
}

let obj = {
  name: "choi",
  age: 20,
}

let obj2 = {
  ...obj,
  age:31
}

0개의 댓글