기본 Type들

White Piano·2020년 11월 7일
2

TypeScript Handbook

목록 보기
2/3

Basic Types의 일부를 요약 및 정리한 글입니다.

Basic Types

Boolean

let isDone: boolean = false;

Number (floating point number)

let decimal: number = 6;
let hex: number = 0xf00d;
let binary: number = 0b1010;
let octal: number = 0o744;

String

let color: string = "blue";

// template string도 가능합니다!
let sentence: string = `Hello, my name is ${fullName}.`

Array

let list: number[] = [1, 2, 3];

Tuple

Array와 달리 크기가 고정이고, 포함된 elements가 서로 다른 Type일 수 있습니다.

// Declare a tuple type
let x: [string, number];
// Initialize it
x = ["hello", 10]; // OK

Enum

몇몇 숫자에 의미 있는 이름을 부여합니다.

// 수를 설정하지 않으면, 자동으로 0부터 대입됩니다.
enum Color {
  Red,     // === Red = 0,
  Green,   // === Green = 1,
  Blue,    // === Blue = 2,
}
let c: Color = Color.Green;         // Color.Green === 1

// 숫자를 통해 name에 접근할 수 있습니다!
let colorName: string = Color[2];   // Color[2] === "Blue"

Unknown

코드를 작성하는 시점에서, type을 알 수 없는 경우에 사용합니다. unknown은 어떤 type이든 될 수 있고, type check를 거쳐 한정됩니다.

// 'unknown'은 어떤 값도 가질 수 있습니다.
let notSure: unknown = 4;
notSure = "maybe a string instead";

// 바로는 다른 type으로 사용할 수 없습니다. (any 제외!)
const aNumber: number = unknown;  // error: Type 'unknown' is not assignalbe to type 'number'

// type check를 거쳐 다른 type으로 사용이 가능합니다.
if (unknown === true) {
  // TypeScript knows that 'unknown' is a boolean now
  const aBoolean: boolean = unknown; // OK
  // So, it cannot be a string
  const aString: string = unknown;   // error
}

Any

TS는 any type에 대해서는 type check를 진행하지 않습니다. 따라서, 존재하는지 확실하지 않은 propertymethod에도 접근할 수 있습니다.

let looselyTyped: any = 4;
// OK, 'ifItExists' might exist at runtime (compiler doesn't check)
looselyTyped.ifItExists();

any는 전파됩니다.

let looselyTyped: any = {};
let d = looselyTyped.a.b.c.d; // 'd'의 type은 'any'입니다!

Void

보통, 함수의 return type으로 사용됩니다. 어떤 값도 없음을 의미합니다.

// 'func'는 어떤 값도 반환하지 않습니다.
const func = (): void => {
  console.log('Hello World!');
}

변수의 type을 void로 할 경우 undefined만 할당 가능합니다.

Null and Undefined

nullundefined는 그 자체로 사용되기보다 주로 다른 type의 subtype으로 활용됩니다.

let u: undefined = undefined;
let n: null = null;

// 보통은 'Union'을 활용합니다.
let age: number | undefined;

Never

never는 일어날 수 없는 경우를 의미합니다. 다른 모든 type의 subtype이지만, 다른 어떤 type도 never의 subtype일 수 없습니다.

// 함수가 언제나 Error를 Throw 하거나, 무한 loop로 종료되지 않는 경우 return type으로 사용할 수 있습니다.
function infiniteLoop(): never {
  while (true) {}
}

Object

non-primitve를 의미합니다.

const create = (o: object): void => {
  console.table(o);
};
create({ prop: 0 }); // OK

Type assertions

프로그래머가 type을 확신할 경우 TS에게 type을 알려줄 수 있습니다.

let someValue: unknown = "this is a string";
// 'as'를 사용한 Type assertion (unknown -> string)
let strLength: number = (someValue as string).length;

다른 언어에서의 type cast처럼 생각할 수 있지만, TS는 type assertion에 대한 어떤 check도 하지 않으며, runtime에 영향을 주지 않습니다.

// TS는 당신을 신뢰합니다. 즉, Type check를 하지 않습니다.
let num: number = 10;
let u: unknown = num;
let str: string = u as string;

// runtime에 영향을 주지도 않습니다.
console.log(str); // 10

0개의 댓글