티스토리 뷰
Boolean
- 자바스크립트 boolean 원시객체
Number
- 자바스크립트의 number타입( 16진법/10진법도 지원합니다.)
- bigint (자바스크립트의 내장객체 중 bigint)
(* Bigint 관련해서 잠깐 짚고 넘어가겠습니다.)
Bigint는 Number의 원시값이 2^53-1 까지의 수를 표현할 수 있는 반면, 2^53-1보다 큰 정수를 표현할 수 있습니다.
그 외에 내장 Math객체의 메소드를 사용할 수 없고,
연산 시 Number타입과 혼합해서 사용할 수 없고, 연산이 필요할 때는 Number 자료형으로 변환해서 써야합니다. 하지만 변환할 경우 정확성을 잃을 수 있습니다.
typeof "bigint"로 타입검사를 해주며,
연산자도 사용가능합니다. (+, *, -, **. %) 비트연산자도 사용가능하지만 >>> 는 지원하지않습니다.
String
- 자바스크립트 원시타입인 string타입
let foo: string = "안녕";
const name = 'jane';
let simpleIntroduction: string = `안녕 내 이름은 ${name}`이야;
Array
- 배열 아이템의 type을 정의합니다.
- 표기방법은 두 가지가 있습니다.
let list: number[] = [1,2,3];
// generic array type
let list2: Array<number> = [1,2,3];
Tuple
- 한글로는 ~개의 요소로 된 집합
- array를 표현하는데, 배열아이템이 복수의 타입이어야할 경우 사용합니다. (정의 순서를 지켜줍니다.)
- length와 type을 둘 다 체크합니다. 정의와 다르다면 컴파일 오류발생합니다.
let x: [string, number];
console.log(x[5].toString());
//Object is possibly 'undefined'.
//Tuple type '[string, number]' of length '2' has no element at index '5'.
Enum
enum Color {
Red = 1,
Green,
Blue,
}
let c: Color = Color.Green;
console.log(c); // 2
- 자바스크립트의 데이터 타입에는 없는데 타입스크립트에는 추가되었습니다.
- 컴파일한 결과를 보면 object 인데, 배열처럼 인덱스(혹은 직접 설정한 수)를 value로 가질 수 있습니다.
- enum을 초기 설정하지않으면 배열처럼 0부터 시작하는 값을 가집니다.
(컴파일한 결과물)
"use strict";
var Color;
(function (Color) {
Color[Color["Red"] = 1] = "Red";
Color[Color["Green"] = 2] = "Green";
Color[Color["Blue"] = 3] = "Blue";
})(Color || (Color = {}));
let c = Color.Green;
console.log(c);
numeric을 key로 값을 가져올 수도 있습니다.
Unknown
- 타입을 모르는 경우(dynamic하게 값이 할당될 경우) 에 unknown 타입으로 정의합니다.
- unknown 타입으로 정의하게 되면 타입체크를 해주거나(typeof) / 비교를 하거나 / type 가드를 붙여주어야합니다. (그렇지않으면 컴파일 오류납니다)
- 타입을 모를 뿐이지 모든 타입의 값 할당에 대해서 허용해준 것이 아니기 때문입니다.
Any
- 모든 타입이 할당될 수 있습니다.
- 서드 파티 라이브러리에 타입을 다 정의해주어야한다거나 타입을 붙이는데 너무 많은 비용(노력 / 시간) 이 소모될 때 any타입으로 정의합니다.
- 컴파일러가 타입체크를 해주지않습니다.
- 그러나 any타입을 사용하는 경우 타입스크립트가 제공하는 장점을 이용하지못하는 것이므로 불필요한 경우에는 any 타입 정의를 하지않도록 합니다
- any타입으로 정의해주면 object의 프로퍼티를 depth관계없이 읽을 수가 있습니다.
let looselyTyped: any = {};
let d = looselyTyped.a.b.c.d;
javascript로 해당코드가 실행되었다면, Uncaught TypeError: Cannot read Property 'b' is undefined 오류가 났을 겁니다.
any와 unknown의 다른 점을 알 수 있는 예시
// any 타입일 경우
let looselyTyped: any = 4;
looselyTyped.ifItExists();
looselyTyped.toFixed();
// unknown 타입일 경우
let strictlyTyped: unknown = 4;
if (typeof strictlyTyped === 'number') {
strictlyTyped.toFixed();
}
Void
- any type과는 반대로 어느 타입도 갖지 않습니다.
- --strictNullChecks옵션이 없을 때는 null 혹은 undefined만 가질 수 있습니다
Undefined Type / Null Type
- 다른 모든 타입의 하위 타입으로, 다른 타입에 할당할 수 있습니다.
- --strictNullChecks 옵션이 없으면 다른 type에도 undefined / null을 할당할 수 있습니다.
옵션이 있을 때는 각자의 타입 / unknown / any 타입에만 할당가능합니다. 그러나 있을 때는 할당해줄 수 있는 값들이 각 1개씩이라 정의해주는 의미가 없어보입니다.
Never
- 어떤 타입도 never를 할당할 수 없습니다. any조차도.
- 보통 함수의 리턴값에 정의하며, exception들을 던지거나 논리적으로 실행될 수 함수의 반환값을 never타입입니다
Object
- 타입으로 존재는 하지만, 사용하지는 않습니다.
- 자바스크립트의 원시타입도 아닙니다.