Basic Types의 일부를 요약 및 정리한 글입니다.
let isDone: boolean = false;
let decimal: number = 6;
let hex: number = 0xf00d;
let binary: number = 0b1010;
let octal: number = 0o744;
let color: string = "blue";
// template string도 가능합니다!
let sentence: string = `Hello, my name is ${fullName}.`
let list: number[] = [1, 2, 3];
Array와 달리 크기가 고정이고, 포함된 elements가 서로 다른 Type일 수 있습니다.
// Declare a tuple type
let x: [string, number];
// Initialize it
x = ["hello", 10]; // OK
몇몇 숫자에 의미 있는 이름을 부여합니다.
// 수를 설정하지 않으면, 자동으로 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"
코드를 작성하는 시점에서, 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
}
TS는 any
type에 대해서는 type check를 진행하지 않습니다. 따라서, 존재하는지 확실하지 않은 property
나 method
에도 접근할 수 있습니다.
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'입니다!
보통, 함수의 return type으로 사용됩니다. 어떤 값도 없음을 의미합니다.
// 'func'는 어떤 값도 반환하지 않습니다.
const func = (): void => {
console.log('Hello World!');
}
변수의 type을
void
로 할 경우undefined
만 할당 가능합니다.
null
과 undefined
는 그 자체로 사용되기보다 주로 다른 type의 subtype으로 활용됩니다.
let u: undefined = undefined;
let n: null = null;
// 보통은 'Union'을 활용합니다.
let age: number | undefined;
never
는 일어날 수 없는 경우를 의미합니다. 다른 모든 type의 subtype이지만, 다른 어떤 type도 never
의 subtype일 수 없습니다.
// 함수가 언제나 Error를 Throw 하거나, 무한 loop로 종료되지 않는 경우 return type으로 사용할 수 있습니다.
function infiniteLoop(): never {
while (true) {}
}
non-primitve
를 의미합니다.
const create = (o: object): void => {
console.table(o);
};
create({ prop: 0 }); // OK
프로그래머가 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