[Typescript] 타입 알아보기 (2)

이광호·2024년 4월 13일

Typescript

목록 보기
3/3

저번 포스트에 이어서 타입들에 대해 알아보자.

타입 - Never

  • Typescript에서 잘못된 것을 알려주기 위한 키워드
  • 절대 발생할 수 없는 타입
  • 보통 빈 배열을 타입으로 잘못 선언한 경우 never 키워드를 볼 수 있음
  • 에러를 반환하는 함수 표현식에서 항상 오류를 발생시키거나 절대 반환하지 않는 반환 타입으로도 사용 가능함
  • null나 undefined처럼 모든 타입에 할당 가능한 하위 타입이지만 반대로 자기 자신을 제외한 어떤 타입도 never에 할당할 수 없음

타입 - Void

  • C, Java에서 함수 return 값이 없을 때 사용하는 void와 같은 키워드
  • 어떤 타입도 존재할 수 없음 (any의 반대 타입)
  • 함수에서 반환 값이 없을 때 반환 타입을 표현하기 위해 쓰임
function hello(n: number): void {
	let a: number = 1 + n;
}

const hi: void = hello(1); // 값을 반환하는 함수가 아니기 때문에 undefined 반환
console.log(hi);
  • 만약 void를 함수가 아닌 변수 타입으로 정의한다면, void 타입 변수에는 undefined와 null만 할당 가능함 (타입 변수를 선언하는 것은 유용하지 않음)

타입 - Literal

  • 문자열과 숫자에 한해서 직접 값 자체를 타입으로도 선언 가능함

숫자 리터럴 타입 (Numeric Literal Types)

const num = 3; // const num: 3
const arr = [1,3];  // const arr: number[]
  • 위 예시처럼 값 자체(숫자와 문자 한정)를 타입으로 지정할 수 있음
  • 따라서 상수 처리는 값 자체를 타입으로 가지지만, 어차피 상수니 타입을 생략할 수 있음

문자열 리터럴 타입 (String Literal Types)

  • 문자열에 값을 정확하게 지정할 때 사용됨
type ABC = 'A' | 'B' | 'C';
  • 추후에 객체지향 함수의 오버로드를 구별하이 위해 같은 방법으로 사용할 수 있음

타입 - Union

  • 2개 이상의 타입을 허용하는 경우 사용함
  • '|'를 통해 구분하며, 괄호는 단일 타입일 때는 안 써도 되지만, 배열일 경우 씌워야 함
let union: string | number;
union = "abC";
union = 123;

주의사항

  • Typescript 컴파일러는 어느 타입이 들어오든 간에 오류가 안 나는 방향으로 확실하게 타입을 추론함

타입 - Intersection

  • &를 사용하여 2개 이상의 타입을 조합하는 경우 사용함
  • Union 타입을 or이라고 생각한다면, Intersection은 and라고 생각하면 됨
  • 새로운 타입을 생성하지 않고 기존의 타입들을 조합할 수 있기 때문에 유용하지만 자주 사용되지는 않음
type Person = {name: string; age : number;};
type Developer = {name: string; skill: string;};
const lgh: Person & Developer = {name: "lgh", age: 22, skill: "typescript"};

타입 - Type Alias

  • 사용자가 정의하는 타입 변수
  • type 별칭으로 타입 형태를 묶어둔 뒤 별칭을 타입명으로 선언하는 방법

    기본적으로 type alias와 interface의 변수명은 대문자로 사용함

type Operation = {version: string, el: (selector:string) => void};

타입 - Interface

  • 타입을 정의한 것들을 한데 모은 객체 타입
  • 객체의 껍데기 혹은 설계도라고도 불림
  • 아래의 범주에 대해 약속을 정의하는데 사용함
    • 객체의 스펙 (속성과 속성의 타입)
    • 함수의 파라미터
    • 함수의 스펙 (파라미터, 반환 타입 등)
    • 배열과 객체를 접근하는 방식
    • 클래스
  • 단순 타입 지정 뿐만 아니라 자체 확장하여 활용도를 높일 수 있음
interface Person = {name: string, age: number};
interface Developer extends Person = {skill: string};

타입 - Generic

  • 타입을 변수화함
  • 나중에 대입하도록 하여 재사용성을 높이기 위해 탄생한 타입
type IsArray<T> = T[];

const numberArr: IsArray<number> = [1,2,3];
const stringArr: IsArray<string> = ["a","b","c"];
profile
성장이 재밌는 개발자

0개의 댓글