티스토리 뷰
들어가기 전에...
🤸♀️자바스크립트의 특성
-C나 Java와 같은 C-family 언어(클래스 기반 객체 지향 언어)와는 구별되는 특성
- Prototype-based Object Oriented Language
- Scope와 this
- 동적 타입(dynamic typed) 언어 혹은 느슨한 타입(loosey typed)언어
동적인 언어 JS 예시
[1,2,3,4] + false // '1,2,3,4false'
//출처: 노마드코더
결과가 미쳤다. 우선 두 타입이 전혀 다른 형태인데 연산은 왜 된것이며 연산이 됐다쳐도 배열은 어디가고 false는 string형태로 배열의 마지막 요소에 붙어있다. (차라리 에러를 던져주세요..)
런타임에러가 왜 최악의 에러일까?
런타임 에러란 콘솔 안에서 일어나는 에러이다. 이런 에러는 유저의 컴퓨터에서 코드가 실행될 때만 일어나는 에러일 수 있다. 즉, 코드를 실행시키기 전에 에러를 감지하지 못하기 때문에 우선은 실행을 해봐야 에러를 확인할 수 있다.
const cong = { name: "gamza"};
cong.hello(); // 실행시키기 전에 cong이라는 객체에 hello메소드가 없는 것을 확인할 방법이 없다.
//실행 시 TypeError ~ is not a function 를 던진다.
🤸♀️TypeScript가 무엇일까?
TypeScript is JavaScript with stytax for types. TypeScript is a stroinglye typed programming language that builds on JavaScript, giving you better tooling at any scale.
(타입스크립트 공홈 설명)
- TypeScript 또한 자바스크립트 대체 언어의 하나로써 자바스크립트(ES5)의 Superset(상위확장)이다.
- C#의 창시자인 덴마크 출신 소프트웨어 엔지니어 Anders Hejlsberg(아네르스 하일스베르)가 개발을 주도한 TypeScript는 Microsoft에서 2012년 발표한 오픈소스로, 정적 타이핑을 지원하며 ES6(ECMAScript 2015)의 클래스, 모듈 등과 ES7의 Decorator 등을 지원한다.
- 강타입 프로그래밍 언어이다. C#, Java, Go, Rust 같은 언어에서 넘어왔다면 프로그래밍 언어라 할 때 컴파일러를 떠올릴 것이다. 이런 언어들은 코드를 다 작성하고 나면 코드를 컴파일 해서 0101로 바꿔주거나 어셈블리 코드, 바이트 코드가 된다( 기계가 실행할 수 있는 다른 종류의 코드로 변환되는 것 )
- 하지만, 타입스크립트의 경우는 작성한 코드가 자바스크립트로 변환된다. 브라우저가 이해할 수 있는 언어가 자바스크립트이기 때문이다. (Node.js는 타입스크립트와 자바스크립트 둘 다 이해할 수 있다. ) 여기서 컴파일은 그저 작성한 타입스크립트 코드를 일반적인 자바스크립트로 바꿔주는 것이다.
Q. 타입스크립트를 사용하는 이유? 이름 그대로 타입 안전성 때문이다.
🤸♀️타입스크립트를 사용함으로써 얻을 수 있는 장점
- 자바스크립트 언어의 장점을 최대한 활용할 수 있게 된다.
- 코드에 버그가 비약적으로 줄어들게 된다.
- 런타임 에러가 줄어든다.
- 결론적으로 생산성도 늘어난다.
1.TypeScript는 JavaScript에 추가적인 구문을 추가하여 editor와의 단단한 통합을 지원합니다. editor에서 초기에 오류를 잡을 수 있습니다.
2. TypeScript 코드는 JavaScript가 실행되는 모든 곳(브라우저, Node.js 또는 Deno 및 앱 등)에서 JavaScript로 변환될 수 있습니다.
3. TypeScript는 JavaScript를 이해하고 타입 추론(type inference)을 사용하여 추가 코드 없이도 훌륭한 도구를 제공합니다.
TypeScript는 정적 타입을 지원하므로 컴파일 단계에서 오류를 포착할 수 있는 장점이 있다.
명시적인 정적 타입 지정은 개발자의 의도를 명확하게 코드로 기술할 수 있다.
이는 코드의 가독성을 높이고 예측할 수 있게 하며 디버깅을 쉽게한다.
참고 링크
기본지식
- TS는 최종적으로 JS로 변환된다. 순전한 TS코드를 돌릴 수 있는 것은 deno이나 대중화가 되지 x. 브라우저, 노드는 모두 js파일을 실행한다. (deno는 node만든 사람이 만든 런타임임)
- TS는 언어이자 컴파일러(tsc)이다. 컴파일러(정확히 말하면 트랜스파일러)는 ts코드를 js로 바꿔준다.
- tsc는 tsconfig.json(tsc --init 시 생성)에 따라 ts 코드를 js(tsc시 생성)로 바꿔준다. 인풋인 ts와 아웃풋인 js모두에 영향을 끼치므로 tsconfig.json 설정을 반드시 봐야한다.
- 단순히 타입 검사만 하고 싶다면 tsc --noEmit (발음: 노 에밋(x) 노 이밋(o) 미국∙영국[iˈmɪt]) 하면된다.
- tsc(타입스크립트 컴파일러)의 역할? 1️⃣ js를 ts로 코드 변환 2️⃣타입 검사 *두 역할은 별개이다. 타입 검사에서 에러가 나도 ts 를 js로 변환할 수 있다. ts적으로는 문법적 오류지만 js로는 말이 되기 때문에
- tsconfig.json 설정에서 esModuleInterop: true, strict: true 두 개만 켜놓는 편(제로초님) 핵심은 스트릭 모드를 켜두는 것
- ts 파일을 실행하는 것이 아니라 결과물인 js를 실행한다.
- 에디터가 필수가 된다. (VScode , 웹스톰 등등..)
- 설치 1.에디터 vs code 설치-> 2. node (LTS, not current 저는 v16.15.0임) -> 3. 노드 설치 후 명령프롬프트 cmd 에서 , node -v npm -v 로 제대로 노드와 npm(노드 패키지 매니저)가 설치됐는 지 확인하기 제 npm -veresion은 8.5.5 네요.
프로젝트 세팅
vscode를 열어서 ts파일을 간단하게 생성하고 터미널에 tsc --noEmit 명령어를 입력해주는데 우리의 터미널은 tsc를 이해하지 못한다. 아래의 명령어로 package.json을 생성하고 나면 npm명령어를 사용할 수 있게 된다.
노드의 패키지를 모아둔 저장소를 npm이라고 보면 된다.
npm init -y # package.json 파일 생성
package.json이 생성되면 해당 폴더는 node 프로젝트가 되는 것이다. 이 노드 프로젝트의 설정들을 다 모아둔 것이 package.json이다.
npm i typescript
#타입스크립트 설치->TS를 설치하면 tsc 명령어를 사용할 수 있게 되는데 tsc 명령어가 안 먹을 것이다.
# 💥요즘에는 tsc 앞에 npx를 붙여야 사용가능
npx tsc --init #tsconfig.json 생성
npx tsc --noEmit #이제 명령어가 정상 실행된다. (타입 검사해주는 기능, IDE에서 자동으로 제공한다.)
npx tsc # ts -> js 파일로 변환하는 기능(ts파일에 타입에러가 있더라도 js파일 변환으로는 문제가 없다.
# tsc에는 2가지 기능이 있고 별개이기 때문이라는 것을 명심
node 파일의 메인이 되는 것이 package.json
결론적으로 TS프로젝트를 시작할 때에는 package.json 파일과 tsconfig.json 파일을 무조건 만들고 시작해야한다.
tsconfig.json
- esModuleInterop: true
- strict: true
- forceConsistentCasingInFileNames는 항상 켜두는 것이 좋다. 리눅스나 맥에서는 파일을 임포트해올 때 파일명의 대소문자를 구분하여 다른 파일로 인식하는데 윈도우의 경우는, 구분하지 않는다. 그렇기 때문에 배포시 임포트해왔던 파일을 제대로 쓰지않아 에러가 날 수 있으니 항상 켜두는 것이 좋다.
- skipLibCheck : true // 패키지는 각각 d.ts 파일을 가지고 있는데 이들의 타입 체킹을 건너뛰는 기능이다. 사용하지 않는 타입까지 검사하면서 진행하면 컴파일러가 느려지기 때문에 실제로 사용하는 것(패키지)들의 타입만 체킹하기 위해서 true로 설정해준다.
+
개인적으로 자바스크립트는 최대한 개발자에게 에러를 던지지 않는 언어인데 처음에는 이게 좋은 줄 알았다.
초반에 접했던 언어는 자바였으니 당연히 이렇게 작성하기 편한 언어가 없다고 생각했다. (멈춰..!)
에러를 던지지 않는 것은 좋은 것이 아니다. 특히나 JS 자체에서 개발자의 잘못된 코드를 보고 멋대로 " 음.. 너가 의도한게 이거려나? " 하고 결과값을 멋대로 던지는 건 실제로 프로젝트를 진행하게 될 때 곤혹스러운 일이 발생할 게 뻔하다.
착한 친구인 건 알겠지만 도와줘서 해야할 일을 2배로 만든다 해야하나..
+ 2022 11 22
아. 타스..
+ 2023 02 16
음 적응만한다면 꽤 괜찮을지도..?
참고하면 좋은 사이트
'Frontend > TypeScript' 카테고리의 다른 글
[TypeScript] 빈객체, 객체 타입, 클래스 추가 개념 (0) | 2022.12.26 |
---|---|
[TypeScript] 타입 가드(좁히기), 커스텀 타입 가드 (0) | 2022.12.24 |
[TypeScript] create-react-app 으로 만든 리액트 앱 TS로 변환 세팅 (0) | 2022.12.06 |
[TypeScript | 타입스크립트 가이드북] TS vs ES6 (0) | 2022.11.28 |
[TypeScript] 타입스크립트의 타입들 (0) | 2022.09.04 |
- Total
- Today
- Yesterday
- text input pattern
- ~ ^
- D 플래그
- reactAPI
- float 레이아웃
- aspect-ratio
- 항해99프론트
- 원티드 3월 프론트엔드 챌린지
- 틸드와 캐럿
- 부트캠프항해
- tilde caret
- 프리온보딩 프론트엔드 챌린지 3월
- 타입스크립트 DT
- nvm 설치순서
- 항해99추천비추천
- 형제 요소 선택자
- is()
- 프리렌더링확인법
- Prittier
- getServerSideProps
- nvm경로 오류
- getStaticPaths
- 원티드 프리온보딩 프론트엔드 챌린지 3일차
- 원티드 FE 프리온보딩 챌린지
- 원티드 프리온보딩 FE 챌린지
- 타입스크립트 장점
- grid flex
- 항해99프론트후기
- && 셸 명령어
- fs모듈 넥스트
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |