티스토리 뷰

카테고리 없음

Types

J_estrella 2020. 10. 20. 06:19

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 

- 타입으로 존재는 하지만, 사용하지는 않습니다.

- 자바스크립트의 원시타입도 아닙니다.

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함