-
[TypeScript] 기본 타입TypeScript 2022. 9. 7. 21:43728x90
소개(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