타입 스크립트가 자체적으로 제공하는 타입 = 내장 타입
타입들끼리 부모와 자식 간의 계층 구조를 가지기도 함.
하나의 값만 저장하는 타입
number
string
boolean
null
undefined
등이 있다.
// number
let num1: number = 123;
let num2: number = -123;
let num3: number = 0.123;
let num4: number = -0.123;
let num5: number = Infinity;
let num6: number = -Infinity;
let num7: number = NaN;
// string
let str1: string = "hello";
let str2: string = `hello`;
let str3: string = `hello ${num1}`;
// boolean
let bool1: boolean = true;
let bool2: boolean = false;
// null
let null1: null = null;
// undefined
let unde1: undefined = undefined;
이렇게 어노테이션을 통해서 변수의 타입을 지정해주고 사용하면 되는데, 모두 원시타입을 사용하고 있다.
만약 타입은 number로 지정하지만 지금 당장은 줄 값이 없어서 null을 할당해야 할 때는, strict가 true인 경우 에러가 뜰 것이다. null 타입이 아닌 변수에 null 값을 주는 것을 엄격하게 검사할지 결정하는 것이 strictNullChecks
이다.
이것을 false로 바꿔주면 타입이 null이 아니지만 null을 할당해도 에러가 나타나지 않는다.
// tsconfig.json
{
"compilerOptions": {
"target": "ESNext",
"module": "ESNext",
"outDir": "dist",
"strict": true,
"moduleDetection": "force",
// null 타입이 아닌 변수에 null 값 엄격하게 검사할지
"strictNullChecks": false
},
"ts-node": {
"esm": true
},
"include": ["src"]
}
// chapter1.ts
// "strictNullChecks": false 로 인해 에러가 나지 않는다.
let numA: number = null;
리터럴 타입은 변수의 값을 타입으로 지정하여 사용하는 것이다.
// 리터럴 타입
let numA: 10 = 10;
let strA: "hello" = "hello";
아직까지는 js와 크게 다르지 않은 타입들이라서 이해가 잘 된다. 리터럴 타입은 아직 쓰임을 잘 모르겠다. strictNullChecks는 유연하게 하려면 false로 하고 안전하게 하려면 true로 하면 되겠다.