
저번 포스트에 이어서 타입들에 대해 알아보자.
타입 - 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"];