chapter 2. 타입스크립트 기본
0. 기본 타입(Basic Types) 이란?
- TS가 자체적으로 제공하는 타입, 내장 타입
- TS에서만 제공하는 타입: any, void, never, unknown
- 타입 계층도: TS가 제공하는 기본 타입들을 계층에 따라 분류한 그림
chapter 2. 실습 환경 설정
{
"compilerOptions": {
"target": "ESNext",
"module": "ESNext",
"outDir": "dist",
"strict": true,
"moduleDetection": "force"
},
"include": ["./"]
}
tsc //컴파일
tsx index.ts //실행
1. 원시타입과 리터럴 타입
원시타입
- 동시에 한 개의 값만 저장할 수 있는 타입들
- number, string, boolean...
📚 number 타입
// 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;
num1 = 'hello'; // ❌
num1.toUpperCase(); // ❌
- js에서 숫자를 의미하는 모든 값을 포함하는 타입
- 정수, 소수, 음수, Infinity, NaN 등 모두 포함
- number 타입으로 정의한 변수에는 number 타입 이외의 값을 할당할 수 없다. 당연히 toUpperCase와 같은 메서드도 사용 불가
📚 string 타입
// string
let str1: string = "hello";
let str2: string = 'hello';
let str3: string = `hello`;
let str4: string = `hello ${str1}`;
문자열을 의미하는 타입
📚 boolean 타입
// boolean
let bool1 : boolean = true;
let bool2 : boolean = false;
참(true), 거짓(false)만 저장하는 타입
📚 null 타입
// null
let null1: null = null;
오직 null값만 포함하는 타입
📚 undefined 타입
// undefined 타입
let unde1: undefined = undefined;
오직 undefined만 포함하는 타입
📚 null 값을 다른 타입의 변수에 할당하기
아직 값이 정해지지 않을 시 변수에 null을 임시로 넣어두기 👉 JS에서는 가능, TS에서는 불가
가능하게 만들고 싶다면 `strcitNullChecks: false` (엄격한 null 검사) 설정
리터럴 타입
하나의 값만 포함하도록 값 자체로 만들어진 타입
let a: 10 = 10;
let b: "hello" = "hello";
- 변수 a의 타입을 숫자 10으로 설정했으므로, 이제 a에는 10 이외의 값을 저장할 수 없게 된다.
- 마찬가지로 b 역시 타입을 "hello"로 지정했기 때문에 b에는 "hello" 외의 값을 저장할 수 없다.
- 불리언 타입의 값도 리터럴 타입으로 만들 수 있다.
2. 배열과 튜플
- 배열: JS 배열과 동일
- 튜플: TS에서만 제공되는 타입
배열
✅ 배열 타입 정의 방법
let arr: number[] = [1, 2, 3, 4];
`변수 이름 : 배열요소타입[]`
let boolArr: Array<boolean> = [true, false, true];
`Array<배열요소타입>` 형태로도 배열의 타입 정의 가능(제네릭 문법)
✅ 다양한 타입 요소를 갖는 배열 타입 정의하기
let multiArr: (number | string)[] = [1, "hello"];
유니온 타입(바`|`를 이용해 여러 타입을 정의하는 문법)을 이용해
여러 타입 중 하나를 만족하는 경우 허용하는 범용적인 타입을 만들 수 있다.
✅ 다차원 배열 타입 정의하기
let doubleArr : number[][] = [
[1, 2, 3],
[4, 5],
];
튜플
- 자바스크립트에는 없는 타입스크립트의 특수 타입
- 길이와 타입이 고정된 배열
let tup: [number, string, boolean] = [1, "hello", true];
✅ 튜플도 배열이다
tsc를 이용해 튜플 타입이 정의된 타입스크립트 코드를 컴파일하면 튜플은 자바스크립트 배열로 변환된다.
따라서 튜플은 배열 메서드인 push, pop을 이용해 요소를 추가 및 삭제할 수 있다.
👉 🚫튜플 사용 시 배열 메서드를 이용해 추가 및 삭제 연산을 할 때에는 주의가 필요함🚫
let tup1: [number, number] = [1, 2];
tup1.push(1); // 에러 발생 x
tup1.push(1);
tup1.push(1);
tup1.push(1);
✅ 튜플을 사용하는 이유
배열의 경우 기존 데이터와 순서가 다른 데이터를 입력할 시 에러가 발생하기 때문에 빨리 눈치채기 쉽지 않다.
const users = [
["이정환", 1],
["이아무개", 2],
["김아무개", 3],
["박아무개", 4],
[5, "조아무개"], // <- 새로 추가함, 오류 발생 x
];
그러나 튜플의 경우 실수를 빨리 발견하고 에러 처리하기가 쉽다.
const users: [string, number][] = [
["이정환", 1],
["이아무개", 2],
["김아무개", 3],
["박아무개", 4],
[5, "조아무개"], // 오류 발생
];