• 함수의 타입 추론

    • 함수의 파라미터를 정의할 때 파라미터의 타입을 지정하지 않으면 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]상태로 저장됨