변수명 :타입명
변수명 :타입[]
변수명 :[타입, 타입]
과 같은 형태로 할당한다.push()
로 요소를 추가할 경우, 타입스크립트가 에러를 잡아주지 못한다.let arr :[string, boolean?] = 'a'
let arr :[string, boolean?, number] //<- error
function 함수(...x :[string, number]) {
// 배열의 길이가 정해지므로 rest파라미터로 쓰는 의미가 없다.
}
function 함수(a :string, b :number) {
// 이것과 차이 없음
}
// 차이점이라면 아래와같이 함수를 호출하였을 때, 인자를 배열로 받는다는 점 정도
함수('a', 1)
[...type[]]
let arr = [1, 2, 3];
let arr2 : [number, ...number[]] = [0, ...arr];
변수명 :{key :타입}
변수명 :{key? : 타입}
let myInfo : {age? :number, name: string} = {name: 'ha0'}
👉🏻 ?는 타입|undefined 의 약자라고 볼 수 있다.
변수명 :{key? : 타입}
let myInfo : {age? :number, name: string} = {name: 'ha0'}
let myInfo : {age:number|undefined, name: string} = {name: 'ha0'}
// 두개가 동일하다고 볼 수 있음
자바스크립트에서의 const변수는 재할당만 막는 역할이기 때문에, const변수더라도 object의 수정은 자유롭게 가능하다.
const info = {region: 'busan'}
info.region = 'seoul' // 변경가능
타입스크립트에서는 object자료 수정도 막을 수 있다.
변수명 :{readonly 키: 타입}
변수 : 타입|타입
변수 :any
변수: unknown
function 함수() :never {}
function 함수() :never {
throw new Error()
}
function 함수() :never {
while (true) {
// 무한반복
}
}
function 함수(param :string) {
if (typeof param === 'string') {
} else {
// string밖에 들어오지 못하는데, string이 아닐때의 코드를 짤 때 파라미터의 타입이 never가 된다.
// param <-- never타입이 됨
}
}
let 함수 = function() {
throw new Error()
}
// 함수 <- never타입됨