new Boolean(false); // typeof new Boolean(false) : 'object'
new String('world'); // typeof new String('world') : 'object'
new Number(42); // typeof new Number(42) : 'object'
Boolean / boolean
가장 기본적인 데이터 타입
단순한 true 혹은 false 값이다.
JavaScript / TypeScript 에서 'boolean' 이라고 부른다.
let isDone: boolean = false;
isDone = true;
console.log(typeof isDone); // boolean;
let isOk: Boolean = true;
// Type 'Boolean' is not assignable to type 'boolean'.
// 'boolean' is a primitive, but 'Boolean' is a wrapper object.
// Prefer using 'boolean' when possible.
let isNotOk: boolean = new Boolean(true);
Number / number
JavaScript 와 같이, TypeScript 의 모든 숫자는 부동 소수점 값이다.
TypeScript는 16진수 및 10진수 리터럴 외에도, ECMAScript 2015에 도입된 2진수 및 8진수를 지원한다.
NaN
1_000_000 과 같은 표기 가능
let decimal: number = 6;
let hex: number = 0xf00d; //16진수
let octal: number = 0o744; //8진수
let binary: number = 0b1010; //2진수
let NotANumber: number = NaN;
let underscoreNum: number = 1_000_000;
template string
행에 걸쳐 있거나, 표현식을 넣을 수 있는 문자열
이 문자열은 backtick (= backquote) 기호에 둘러쌓여 있다.
포함된 표현식은 `${ expr }` 와 같은 형태로 사용한다.
let fullName: string = "Minseung Gang";
let age: number = 32;
let sentence: string = `Hello, my name is ${fullName}.
I'll be ${age + 1} years old next month.`;
console.log(sentence); // I'll be 33 years old next month.
const sym = Symbol();
const obj = {
[sym]: "value",
};
obj["sym"]; //접근 불가능
obj[sym]; // 접근 가능
Undefined & Null
number 에 null 또는 undefined 를 할당할 수 있다는 의미.
하지만, 컴파일 옵션에서 `--strictNullChecks`사용하면, null 과 undefined 는 void 나 자기 자신들에게만 할당할 수 있다.
이 경우, null 과 undefined 를 할당할 수 있게 하려면, union type 을 이용해야 한다.
let name: string = null;
let age: number = undefined;
// strictNullChecks => true
// Type 'null' is not assignable to type 'string'.
let name: string = null; (X)
// null => null || void, undefined => undefined || void
// Type 'null' is not assignable to type 'undefined'.
let u: undefined = null; // (X)
let v: void = undefined; // (O)
let union: string | null | undefined = 'str';
Object
javascript의 객체와 조금 다르다.
"primitive type 이 아닌 것"을 나타내고 싶을 때 사용하는 타입
// create by object literal
const person1 = { name: "Minseung", age: 32 };
// person1 is not "object" type.
// person1 is "{name: string, age: number}" type.
// create by Object.create
const person2 = Object.create({ name: "Minseung", age: 32 });