ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [TypeScript] 기본 타입
    TypeScript 2022. 9. 7. 21:43
    728x90

    소개(Introduction)

    TypeScript는 JavaScript와 거의 동일한 데이터 타입을 지원하며, 열거 타입을 사용하여 더 편리하게 사용할 수 있습니다.

    • javascript에서는 열거 타입을 지원하지 않습니다.

    형태

    대부분의 형태는 아래와 같습니다.

    let 변수명: 타입 = 값;
    

    1) 불리언(Boolean)

    참/거짓(true/false)를 나타내는 값입니다.

    let isTrue: boolean = false;
    

    2) 숫자(Number)

    JavaScript처럼 TypeScript의 모든 숫자는 부동 소수 값입니다. TypeScript는 2, 8, 10, 16진수 리터럴을 지원합니다.

    let decimal: number = 6;
    let hex: number = 0xf00d;
    let binary: number = 0b1010;
    let octal: number = 0o744;
    
    • 부동 소수점
      • 2진 표현법으로 수를 정확히 나타낼 수 있지만 0.1과 같은 간단한 숫자를 정확히 표시하지 못해 반올림 오차가 있을 수 있다. (소수 부분은 최대 52비트)
      • 0.1 ⇒ 0.0001 1001 1001 1001 … (무한 순환)
      • 0.2 =? 0.0011 0011 0011 0011 … (무한 순환)
      • 0.1 + 0.2 = 0.1001100110011001 … = (10진법) 0.30000000000000000004가 됩니다.
      console.log(0.1 + 0.2); //0.30000000000000004
      console.log(0.1 + 0.2 === 0.3); //false
      
      • js 에서 안전 정수 범 위 를 -2^53 ~ 2^53로 규정
      function sum(a, b) {
        return Number(a) + Number(b)
      }
      console.log(sum(11111111111111111, 11111111111111111))   //  22222222222222224
      
    • js의 Number는 부동 소수로 IEEE 754 표준의 64-bits의 이중 정밀도 수치이다.

    3) 문자열(String)

    텍스트 데이터 타입을 string으로 표현합니다.

    let color: string = "blue";
    // 백틱(``) 사용 가능
    let fullName: string = `Bob Bobbington`;
    // 백틱(``) 사이에는 ${변수명}로 변수를 사용 가능
    let sentence: string = `Hello, my name is ${ fullName }.
    I'll be ${ age + 1 } years old next month.`;
    //위 sentence와 동일한 사용방법
    let sentence: string = "Hello, my name is " + fullName + ".\\n\\n" +
        "I'll be " + (age + 1) + " years old next month.";
    

    4) 배열(Array)

    배열을 다루는 방법은 두가지가 있습니다.

    • []
    • let list: number[] = [1, 2, 3];
    • 제네릭 배열 타입
    • let list: Array<number> = [1, 2, 3];

    5) 튜플(Tuple)

    요소의 타입과 개수가 고정된 배열을 표현할 수 있습니다.(요소의 타입이 모두 같을 필요는 없습니다.)

    // 튜플 타입으로 선언
    let x: [string, number];
    // 초기화
    x = ["hello", 10]; // 성공
    // 잘못된 초기화
    x = [10, "hello"]; // 오류
    
    console.log(x[0].substring(1)); // 성공
    console.log(x[1].substring(1)); // 오류, 'number'에는 'substring' 이 없습니다.
    
    x[3] = "world"; // 오류, '[string, number]' 타입에는 프로퍼티 '3'이 없습니다.
    

    6) 열거(Enum)

    열거 타입 : 데이터 중에는 몇 가지로 한정된 값만을 갖는 경우가 있습니다. 가령, 요일에 대한 데이터는 월요일~일요일까지 총 일곱 개의 값만 갖고, 계절에 대한 데이터는 봄, 여름, 가을, 겨울이라는 네 개의 값만 갖습니다. 이와 같이 한정된 값만을 갖는 데이터 타입을 바로 열거 타입이라고 합니다.

    • enum은 0부터 시작하여 멤버들의 번호를 매깁니다.
    enum Color {Red, Green, Blue}
    // 0 : Red, 1 : Green, 2 : Blue
    let c: Color = Color.Green;
    
    • enum의 번호를 수동으로 매길 수 있습니다.
    enum Color {Red = 1, Green = 2, Blue = 4}
    let c: Color = Color.Green;
    
    • enum의 변수를 원하는 것만 수동으로 매길 수 있습니다.
      • 무조건 0부터 시작하고 수동으로 정의한 곳 부터 + 1씩 커집니다.
    enum Color {Red, Green = 2, Blue}
    //Red : 0, Green : 2, Blue : 3
    

    7) Any

    어떤 타입이 들어올지 모를 때 주로 사용합니다.

    예를들어, 사용자로부터 받은 데이터나 서드 파티 라이브러리 같은 동적 컨텐츠에서 사용할 수 있습니다.

    Any타입은 타입 검사를 하지 않는 기존 JavaScript처럼 작업할 수 있는 방식입니다.

    let list: any[] = [1, true, "free"];
    

    8) Void

    Any와 반대로 어떤 타입도 존재할 수 없음을 나타냅니다.

    • 반환 값이 없을 때 반환 타입을 표현하기 위해 주로 사용합니다.
    • function warnUser(): void { console.log("This is my warning message"); }
    • 변수로 사용하면 null 과 undefined만 정의할 수 있습니다.
    • let unusable: void = undefined; unusable = null; // 성공 `--strictNullChecks` 을 사용하지 않을때만

    9) Null and Undefined

    null과 undefined는 다른 모든 타입의 하위 타입입니다. 즉, number, string같은 타입에 할당할 수 있습니다.

    • 하지만 stricktNullChecks를 true로 선언하면 null과 undefined는 오직 any와 자신들 타입에만 할당 가능합니다. 따라서 null과 undefined를 사용하고 싶다면 유니언 타입을 사용해야합니다.
    // 이 밖에 이 변수들에 할당할 수 있는 값이 없습니다!
    let u: undefined = undefined;
    let n: null = null;
    

    10) Never

    never 타입은 절대 발생할 수 없는 타입을 나타냅니다.

    타입이란 어떤 집합을 의미한다고 생각할 수 있는데 Never 타입은 공집합, 바닥 타입이라고 생각 할 수 있습니다.

    바닥 타입이기때문에 어떤 타입도 Never 타입에 할당할 수 없습니다.

    하지만 Never타입은 어떤 타입에도 할당될 수 있습니다.

    // never를 반환하는 함수는 함수의 마지막에 도달할 수 없다.
    function error(message: string): never {
        throw new Error(message);
    }
    
    // 반환 타입이 never로 추론된다.
    function fail() {
        return error("Something failed");
    }
    
    // never를 반환하는 함수는 함수의 마지막에 도달할 수 없다.
    function infiniteLoop(): never {
        while (true) {
        }
    }
    

    11) 객체(Object)

    Object는 원시 타입이 아닌 모든 타입을 나타냅니다. 예를들어number, string, boolean, bigint, symbol, null, 또는 undefined가 아닌 나머지를 의미합니다.

    declare function create(o: object | null): void;
    
    create({ prop: 0 }); // 성공
    create(null); // 성공
    
    create(42); // 오류
    create("string"); // 오류
    create(false); // 오류
    create(undefined); // 오류
    

    12) 타입 단언(Type assertions)

    가끔, TypeScript보다 개발자가 값에 대해 더 잘 알고 일을 때가 있습니다. 대개, 이런 경우는 어떤 엔티티의 실제 타입이 현재 타입보다 더 구체적일 때 발생합니다.

    • 타입 단언(Type assertions) : 컴파일러에게 "날 믿어, 난 내가 뭘 하고 있는지 알아"라고 말해주는 방법입니다.

    타입 단언은 다른 언어의 형변환과 유사하지만, 데이터를 재구성하거나 특별한 검사를 하지 않습니다. 런타임에 영향이 없고, 오직 컴파일러만 이를 사용합니다.

    • angle-bracket 문법
    • let someValue: any = "this is a string"; let strLength: number = (<string>someValue).length;
    • as 문법
    • let someValue: any = "this is a string"; let strLength: number = (someValue as string).length;

    참고

    https://typescript-kr.github.io/pages/basic-types.html

    https://intrepidgeeks.com/tutorial/js-floating-pointplus-sign

    728x90

    'TypeScript' 카테고리의 다른 글

    [TypeScript] 제네릭  (0) 2022.09.17
    [TypeScript] 열거형  (1) 2022.09.16
    [TypeScript] 클래스  (0) 2022.09.15
    [TypeScript] 유니언과 교차타입  (1) 2022.09.10
    [TypeScript] 인터페이스  (0) 2022.09.08

    댓글

Designed by Tistory.