본문 바로가기

개발/TypeScript

TypeScript 란 ?

TypeScript는 동적 언어의 Javasscript의 한계점을 보완하고자 나온건데,

원래 정적 타입의 언어는: 모든 변수에 타입을 다 지정해줘야 하기 때문에 → 타이핑 양이 매우 증가한다.

타입스크립트는 동적 타입시스템 + 정적타입 시스템의 결합한거라 보면된다.

 

TypeScript 동작 원리

JavaScript는 아래 그림과 같이 프로그래밍 언어 → 컴파일러 → 기계어 (JavaScript → 컴파일러 → 바이트코드)로 변환되어 동작된다.

 

 

그럼 TypeScript의 컴파일과정은 ?

Typescript는 AST 이후에 타입검사 과정을 거치게 되는데, 타입검사가 완료된 이후에 바이트코드로 변환되는게 아닌 JavaScript로 변환이 된다.

 

타입스크립트 컴파일러 옵션 설정하기

{
  "compilerOptions": {
    "target": "ES5", // 컴파일로 후 생성되는 자바스크립트 버전
    "module": "CommonJS", // javascript의 모듈시스템 지정
    "outDir": "dist", // 자바스크립트가 어디에 생성될지 경로 지정
    "strict": true, // 엄격하게 타입을 체크할거면 true
    "moduleDetection": "force" // 각 파일을 개별모듈로 강제로 지정
  },
  "include": ["src"] // 타입스크립트를 포함할 파일 경로들 지정
}

프로젝트, 팀에 따라 위 옵션 설정은 달라지겠지만 큰 범위내에서 크게 달라지진 않는다.

 

타입스크립트 기본타입

기본타입에는 대표적으로 number, string, boolean, null, undefined, 리터럴타입 존재한다. 하나씩 살펴보자면,

// number
let num1: number = 123;

// string
let str1: string = "hello";

// str1 = 123; // 에러발생

// boolean
let bool1: boolean = true;

// boo1 = 123 // 에러발생

// null
let null1: null = null;

// undefined
let unde1: undefined = undefined;

// 리터럴 타입
let numA: 10 = 10;
let strA: "hello" = "hello";
// let boolA: true = false // true라는 값만 할당 가능.

 

배열, 튜플, 객체 Type

let numArr: number[] = [1, 2, 3];
let strArr: string[] = ["hello", "im", "apple"];
let boolArr: boolean[] = [true, false, true];

// 배열에 들어가는 요소들의 타입이 다양한 경우
let multiArr: (number | string)[] = [1, "hello"];

// 다차원 배열의 타입을 정의하는 방법
let doubleArr: number[][] = [
  [1, 2, 3],
  [4, 5],
];

// 튜플 -> 길이와 타입이 고정된 배열 (배열이긴한데 엄격한 배열느낌.)
let tup1: [number, number] = [1, 2];
let tup2: [number, string, boolean] = [1, "2", true];

// 객체

let user: { id: number; name: string } = {
  id: 1,
  name: "jin",
};

let config: {
  readonly apiKey: string;
} = {
  apiKey: "MY API KEY",
};

// config.apiKey = "TEST KEY" -> readonly 속성이므로 에러 발생

배열, 튜플, 객체도 위와 같이 사용하면 되는데, readonly 키워드를 붙여서 객체의 값을 변경하지 못하도록 할 수 있다.

'개발 > TypeScript' 카테고리의 다른 글

TypeScript - 제네릭  (1) 2024.10.21
TypeScript - 클래스  (1) 2024.10.21
함수 Type  (0) 2024.10.21
TypeScript - 대수 타입, 타입추론, 타입단언  (5) 2024.10.20
TypeScript가 지원하는 타입 파헤치기  (0) 2024.10.19