함수의 타입 추론
함수의 파라미터를 정의할 때 파라미터의 타입을 지정하지 않으면 any 타입의 파라미터를 받게 됨
함수의 반환 타입은 return 문에 의해 타입 추론이 이루어짐
파라미터 타입을 지정하지 않으면 any 타입이 적용되며 경고 사항
반환값의 경우 return 구문으로 암묵적인 타입의 유추 가능
예시 코드
const findArea = function (width: number, height: number): number {
return width * height
}
// return에 의한 타입 추론
// 파라미터의 타입은 지정하고 반환 타입은 지정하지 않았지만 반환값을 확인해 추론
const findArea = function(width: number, height: number) {
return width * number
}
// 람다식 표현
const findArea = (width: number, height: number): number
=> { return width * height }
함수의 반환값이 없는 경우
함수의 반환값이 없을 경우 반환타입은 void
지정
반환타입으로 never
도 지정 가능한데 절대 발생하지 않는 값의 타입
void
타입은 변수로 사용될 경우 undefined, null
만 가능
never
타입은 어떤 값도 대입될 수 없음
예시 코드
const accountBalance: number = 10000
function overdraftError(message?: number): never {
throw Error(message)
}
function withdraw(balance: number): number {
if(accountBalance < balance) {
overdraftError('잔액이 부족합니다.')
}
return accountBalance - balance
}
배열 타입
배열도 일반 변수처럼 타입을 지정할 수 있음(명시적, 추론적)
타입을 지정하지 않는 경우 any 타입의 요소들로 배열이 이루어짐
배열에 서로 다른 타입의 요소를 지정하는 것이 가능하며, 이를 타입으로 지정 가능
서로 다른 타입의 요소로 지정되면 해당 배열에는 순서에 상관없이 지정된 타입들의 요소를 가질 수 있음
예시 코드
// 명시적 타입 지정
const members: string[] = ['Kim', 'Park', 'Lee']
const myArr: (string | number)[] = ['TypeScript', 2020]
const myArr: (string | number)[] = [2020, 'TypeScript']
// 추론적 타입 지정
const members = ['Kim', 'Park', 'Lee']
const myArr = ['TypeScript', 2020]
튜플 타입
튜플을 이용하면 배열의 요소 수와 각 요소에 대한 타입을 지정할 수 있음
튜플은 정해진 길이가 맞지 않으면 에러 발생, 하지만 push()
메서드를 이용하면 튜플의 규칙은 무시됨
서로 다른 타입의 요소를 갖는 배열은 순서에 상관없이 데이터를 넣을 수 있는 반면, 튜플은 정해진 순서로 넣음
튜플은 배열보다 저장되는 요소에 순서와 제약을 두고자 할 때 사용
예시 코드
const tuples: [string, number] = ['Kim', 30]
// tuples[0] = 50 -> 타입 에러가 발생 지정한 타입대로 넣어야함(string만 가능)
// tuples.push(100) -> ['Kim', 30, 100]상태로 저장됨