프로그램을 위해 작성한 소스코드를 다른 프로그램이나 기계가 처리하기 용이한 형태로 바꾸는 과정을 말한다.
컴파일 과정을 마친 컴퓨터 프로그램이 실행되고 있는 환경 또는 동작되는 동안의 시간을 말한다.
(JavaScript가 웹 브라우저에서 실행된다면 런타임 환경은 웹 브라우저가 된다. Node.js에서 동작한다면 런타임 환경은 Node.js이다.)정리
컴파일 에러는 프로그램이 컴파일링 되는 과정에서 발생하게 되고 일반적으로 컴파일 에러 발생시 문제를 일으킨 소스코드라인을 지적해준다. => 그렇기에 디버깅이 쉬워진다.
-신택스 오류
-타입체크 오류런타임 에러는 프로그램이 실행이 시작되고 예기치 못한 충돌혹은 에러로인해 실행중에 발생하는 형태의 오류이며, 정확한 부분을 찾기 어려워진다.
-0나누기 오류
-널(Null)참조 오류
-메모리 부족 오류
위에 정리한 내용을 보면 굳이 TypeScript를 사용안할 이유는 없는거 같다.
하지만 단점으로는 러닝커브가 좀 있다는 것과 처음에는 코드가 더 길어지기 때문에 타입스크립트가 오래 걸리는거 같지만 컴파일 도중 에러를 찾아주는 것만으로도 큰 프로젝트를 생각했을때는 생산성
이 더 증가한다고 생각을 했다.
또한 리액트를 사용하는 프로젝트였기에 호환성또한 좋았기에 선택을 했다.
나는 처음부터 CRA를 통해 타입스크립트를 설치하였다.
npx create-react-app my-app --template typescript
CRA를 통해 타입스크립트를 설치했다면 자동으로 깔려 있을것이다.
만약 없다하면 밑에 명렁어로 설치하면 된다.
npx tsc --init
{
"compilerOptions": {
"target": "ESNext", // JS파일을 어떤 버전으로 바꿀지 설정
"lib": ["DOM", "DOM.Iterable", "ESNext"],// 몇 버전까지의 JS를 사용할지 작성.
"module": "ESNext", // 파일간 import 문법을 구현할 때 어떤 문법을 쓸지
"skipLibCheck": true,// 선언파일의 형식 검사를 스킵. -> 정확성은 떨어지지만 그만큼 시간을 절약.
"types": ["vite/client"],
/* Bundler mode */
"moduleResolution": "bundler",
"allowImportingTsExtensions": true,
"resolveJsonModule": true,
"isolatedModules": true,
"noEmit": true,
"jsx": "react-jsx", //tsx파일을 어떻게 jsx파일로 변환할 건지 결정.
/* Linting */
"strict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"noFallthroughCasesInSwitch": true
},
"include": [".eslintrc.cjs","src","src/image.d.ts"], // 컴파일대상 포함.
"references": [{ "path": "./tsconfig.node.json" }]
}
스타일드 컴포넌트로 css를 했기에 예를 들면 라이브러리 앞에 @types/
를 붙히면 리액트 라이브러리에 거의 모든 곳에 호환이 되고 설치가 된다.
npm i @types/styled-components
모를때 찾아보자
내가 타입스크립트 문법 정리한 블로그