let isDone: boolean = false;
isDone = true;
console.log(typeof isDone); // 'boolean'
let isOk: Boolean = true;
// let isNotOk: boolean = new Boolean(true); // 에러


let decimal: number = 6; // 10진수 리터럴
let hex: number = 0xf00d; // 16진수 리터럴
let binary: number = 0b1010; // 2진수 리터럴
let octal: number = 0o744; // 8진수 리터럴
let notANumber: number = NaN; // NaN도 number타입입니다.
let underscoreNum: number = 1_000_000; // 이런 표기도 가능합니다.

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);


console.log(Symbol('foo') === Symbol('foo')); // false
심볼타입을 사용할때 에러가 나는 경우가 있습니다.
이 경우는 Symbol이라는 것을 사용할 수 있는 TypeScript 환경이 아니기 때문입니다.
해결방법

const sym = Symbol(); // sym은 이제 고유한 값을 가지게 되었습니다.
//sym을 이용해서만 접근할 수 있는 object의 프로퍼티를 만들 때 많이 사용합니다.
const obj = {
[sym]: "value", // [sym] 으로 작성하여 위에서 생성한 sym값이 들어오도록합니다.
};
//obj['sym']; // 이 값으로는 접근할 수 없습니다.
obj[sym]; // 이 값으로는 접근가능합니다.
함수로 사용할 때는 대문자(Symbol) 심볼.
타입으로 사용할 때는 소문자(symbol) 심볼.

let u: undefined = undefined;
let n: null = null;
타입도 소문자, 값도 소문자로 작성해야 합니다.
이 타입을 가진 변수들에 할당할 수 있는 것들은 거의 없습니다.
undefined타입을 가진 변수에는undefined값 이외에는 할 수 있는 것이 없습니다. 마찬가지로null이라는 타입을 가진 변수에도null말고는 할 수 있는것이 없습니다.
undefined 와 null 은 다른 모든 타입들의 하위타입으로 존재합니다.(설정을 하지 않으면..)

null이나undefined를 다른 다른타입에 할당할 수 없게 tsconfig에서--strictNullChecks를 사용하는 것이 타입적으로 안전합니다. 그래서 보통--strictNullChecks을 사용하는 편입니다.
이제 예를들어 number타입에 null과 undefined를 할당할 수 없게 되면, 코딩할 때 매우 힘들 것입니다. 왜냐하면 null과 undefined를 자주 사용하기 때문입니다.
그래서 null과 undefined를 함께 사용하기 위해서는 union type 을 이용해야 합니다.

"strict": true 를 사용하면 그 아래 모든 하위 Type Checking과 관련된 옵션들을 전부 true로 사용하게 됩니다.--strictNullChecks 도 표함되어 있습니다.void에는 undefined를 할당할 수 있습니다. null은 할당할 수 없습니다. 의미적으로 void은 undefined와 비슷한 의미를 가지고 있습니다. 그래서 void에 undefined를 넣는 것은 의미적으로는 그렇게 잘못된 것은 아닙니다.
//let MyName: string = undefined; // 할당할 수 없습니다.
//let u: undefined = null; // 할당할 수 없습니다.
// let v: void = null; // void타입에는 null을 넣을 수 없지만,
let v: void = undefined; // undefined는 넣을 수 있습니다.
let union: string | null = null; // 이것이 union 타입입니다.
// 이제 string 타입도 넣을 수 있고, null도 넣을 수 있습니다.
union = "Mark";

let n: null = null;
console.log(); // null
console.log(typeof n); // object
null값을 runtime에서 typeof 연산자를 이용해서 알아내면, object로 나옵니다.
let u: undefined = undefined;
console.log(u); // undefined
console.log(typeof u); // undefined