본문 바로가기
FrontEnd/TypeScript

TypeScript 타입

by y.j 2022. 9. 20.
728x90

TypeScript의 타입

프로그램이 유용하려면, 가장 간단한 데이터 단위로 작업 할 수 있어야한다.

TypeScript는 JavaScript에서 기대하는 것과 동일타입을 지원하며 추가적인 열거타입이 제공된다.

JavaScript 타입
Boolean
Number
String
Null
Undefined
Symbol
Array

타입스크립트에서 추가적으로 제공하는 타입

추가타입
Any
Void
Never
Unknown
Tuple: Object형

 

boolean타입

let isOk: Boolean = true;

 

Number타입

let decimal: number = 6;                   // 10진수

let hex: number = 0xf00d;                  // 16진수

let binary: number = 0b1010;               // 2진수

let octal: number = 0o744;                 // 8진수

let notANumber: number = NaN;              // Not a Number가능

let underscoreNum: number = 1_000_000;     // _로 천단위 표기 가능

 

String타입

  • 자바스크립트처럼 백틱(`)기호를 사용하여 변수를 사용할 수 있다.
let myName: string = 'Mark';

myName = 'Anna';

let fullName: string = 'Mark Lee';
let age: number = 39;

let sentence: string = `Hello, My name is ${fullName}.

I'll be ${age + 1} years old next month.`;

console.log(sentence);

 

Symbol타입

  • new Symbol로 사용할 수 없고 프리미티브 타입을 사용해야만 한다.
  • 고유하고 수정불가능한 값으로 만들어 줍니다.
  • 주로 접근제어하는데 많이 쓰인다.
console.log(Symbol('foo') === Symbol('foo'));,

const sym = Symbol();

// 변수 sym을 키로 만들 수 있다.
const obj = {
    [sym]: "value",
};


// 변수 sym을 통해 접근이 가능하다.
obj[sym];

 

null과 undefined타입

  • tsconfig.ts에서 아래 옵션이 켜져 있으면 null과 undefined를 변수에 넣을 수 없다.
"strict": true,                // 옵션
  • null은 사용할 준비가 덜 된 상태를 의미한다.
let MyName: string = null;    // 컴파일 에러  

let union: string | null = null; // 사용가능

union = "Mark";
  • undefined는 준비가 아예 안된 상태를 의미한다.
let u: undefined = null;   // 넣을 수 없다.

let v: void = undefined;   // 가능

 

Object

non-primitive type을 나타내고 싶을 때 사용한다.

const person3: object = { name:"Mark", age:39 };      // 넣을 수 있다.    

const person4: object = 39;                           // 넣을 수 없다.

 

Array

  • JS에 기존에 존재하던 타입
  • 같은 타입의 셋
let list: number[] = [1, 2, 3];

// 사용자제
let list2: Array<number> = [1, 2, 3];

// union 타입
let list3: (number | string)[] = [1, 2, 3, "4"];

 

Tuple

  • 서로 다른 데이터 타입을 넣을 수 있는 타입
let x: [string, number];

x = ["Hello", 39];

// x = [10, 'Mark'];

const person: [string, number] = ['Mark', 39];

const [] = person;

 

Any

  • 어떤 타입이어도 상관없는 타입이다.
  • 컴파일 타임에 타입체크가 정상적으로 이뤄지지 않기 때문에 최대한 쓰지 않는게 좋다.
  • noImplicitAny: true를 켜놓으면 any를 써야 하는데 쓰지 않으면 오류를 뱉도록 한다.
function returnAny(message: any): any {
    console.log(message);
}

const any1 = returnAny('리턴은 아무가나');

any1.toString();

 

unknown

  • 변수가 무엇이든 될 수 있음을 알려주는 타입을 제공한다.
  • any보다는 type-safe한 타입이다.
declare const maybe: unknown;

const aNumber: number = maybe; // 할당이 안됨

if (maybe === true) {  // boolean으로 타입이 지정됨
    const aBoolean: boolean = maybe;

    // const aString: string = maybe;   
}

if(typeof maybe === 'string') {  // string으로 타입이 지정됨
    const aString: string = maybe;

    // const aBoolean: boolean = maybe;
}

 

never

  • 모든 타입의 subtype이며 모든 타입에 할당 할 수 있다.
  • 하지만, never에는 어떤 것도 할당할 수 없다.
  • any도 할당 할 수 없다.
  • 잘못된 타입을 넣는 것을 방지 할 수 있다.
function error(message: string): never {
    throw new Error(message);
} 

function fail() {
    return error('failed');
}

function infiniteLoop(): never {
    while(true) {}
}

let a: string = "hello";

if(typeof a !== 'string') {
    a;                             // never가 됨.
}

type Indexable<T> = T extends string ? T & {[index: string]: any} : never;

type ObjectIndexable = Indexable<{}>;

const b: Indexable<{}> = '';    // never타입이 되서 대입이 안됨

 

void

  • 리턴가지고 아무것도 안하겠다는 의미
function returnVoid(message: string): void {
    console.log(message);
    return undefined;  // undefined만 void에 할당이 가능하다.
}

returnVoid("리턴이 없다.");
728x90

'FrontEnd > TypeScript' 카테고리의 다른 글

Interface  (0) 2022.10.07
TypeScript 컴파일러  (0) 2022.09.28
TypeScript 타입호환성  (0) 2022.09.27
TypeScript의 옵션  (0) 2022.09.26
TypeScript란?  (1) 2022.09.20

댓글