array 자료에 타입을 지정 할 때 string [ ]
과 같이 지정하는데
이보다 더 구체적이게
음 ... literal type
과 같이 지정할 수 가 있다 .
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] // 불가능
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에 담겨서 오는게 차이일 뿐이다.
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] // 이건 말 안되는것 알지?
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 처럼 맘껏 집어넣을 수 있다.
interface O {
name: string,
age: number
}
let obj = {
name: "choi",
age: 20,
}
let obj2 = {
...obj,
age:31
}