대부분의 타입스크립트는 리액트를 사용하므로 따로 설정을 하지 않아도 괜찮지만
그래도 기본적인 정보는 알고 있어야 하기 때문에 그 부분을 정리하겠다.
npm init -y
입력package.json
에서 main
이 적혀 있는 라인 삭제scripts
안에 test
properties 삭제npm i -D typescript
입력 package.json
의 devDependencies
프로퍼티에 typescript: 버전명
이 적혀 있으면 정상 설치가 된것이다.src
폴더안에 index.ts
를 만들고 아래 코드 입력const hello = () => console.log("hi")
code tsconfig.json
파일을 만들고 ctrl + s
로 저장.tsconfig.json
파일 밑에 아래 코드 입력{
"include": ["src"],
"compilerOptions": {
"outDir":"build"
}
}
니코쌤강의 에서는 저렇게만 입력하면 빌드 됫지만 나는 build 폴더가 생기지 않았다. 아래 댓글에 해결방법이 나와서 적용해보니 정상 작동 되었다.
"include": ["src"],
"compilerOptions": {
"outDir": "build",
"target": "ES6",
"moduleResolution": "node"
}
package.json
의 script
부분에 "build": "tsc"
추가{
"name": "typechain",
"version": "1.0.0",
"description": "",
"scripts": {
"build": "tsc",
},
"keywords": [],
"author": "",
"license": "ISC",
}
npm run build
로 build 한다. build
폴더에 index.js
를 확인한다. index.ts
index.js
로 변경 되어 있다.index.js
를 보면 타입스크립트로 잘 변경된 것을 확인할 수 있다. tsconfig
의 target
에 따라서 버전에 맞게 번들링된다.! typescript
에서 권장 하는 버전은 es6
이다.!tsconfig.json
파일은 여러가지 타입 스크립트 설정파일을 만질 수 있는 파일이다.
//tsconfig
{
"include": ["src"],
"compilerOptions": {
"outDir": "build",
"target": "ES6",
"moduleResolution": "node",
"lib": ["ES6"],
"strict": true,
"esModuleInterop": true,
}
}
ts
파일에서는 dom에 접근하려고 하면 자동완성이 되지 않는다.
하지만 lib
에 dom
을 넣어주는 순간 자동완성이 가능하다.
lib
에 내가 무엇을 사용하는지 입력해주면 ts
에서는 그것을 확인해서 자동완성 기능을 제공해준다.
lib
은 typescript에게 내가 어떤 라이브러리를 사용하는 지 알려주는 부분이다.Math
의 fround
lib
은 타입스크립트에게 어떤 API를 사용하고 어떤 환경에서 코드를 실행하는지 알려준다.
이게 가능한 것은 document를 입력후 fn
+ alt
키를 누르면 나오는데, 그 나오는 파일의 확장자가 d.ts
파일이라고 되어있다. 여기에서 type을 지정해주었기 때문에 자동완성이 가능한 것이다!
module을 사용하기 위해 설정해줘야 하는 파일
우리가 직접 설정해줄 수 있다. 아래 코드 처럼 모듈을 만든다고 가정해보자
//myPackage.js
export function init(config) {
return true;
}
export function exit(code) {
return code + 1;
}
이것을 index.ts
파일에서 사용하고 싶어서 import
해주겠다.
import {init} from "myPackage"
별다른 오류가 발생하지 않는다. 더 빡빡한 TS의 도움을 받기 위해서 tsconfig.js
에 strict
옵션을 추가해주자
//tsconfig.json
{
"include": ["src"],
"compilerOptions": {
"outDir": "build",
"target": "ES6",
"moduleResolution": "node",
"lib": ["ES6"],
"strict": true,
}
}
다시 index.js
로 돌아가보면 오류가 있는것을 확인이 가능
TS 에서는 어떻게 하면 이 문제를 해결해 줄 수 있을까?
위에서 말했듯이 d.ts
파일이 존재한다고 하였다. 이 파일을 우리도 동일하게 만들어주면 된다.
myPackage.d.ts
파일을 만든다.
//myPackage.d.ts파일을 만든다.
interface Config {
url: string;
}
declare module "myPackage" {
function init(config: Config): boolean;
function exit(code: number): number;
}
위와같이 선언해준다. 타입을 선언해주면 js 파일을 모듈로서 ts에서 사용할 수 있다.!
아래와 같이 말이다!
//index.ts
import {init,exit} from myPackage
init({url:"true"})
exit(1)
하지만 무언가 복잡하다 좀 더 쉽게 하고 싶다.! 프로젝트에 Ts와 Js가 같이있는 경우 매번 d.ts
파일을 만들기 힘들다. 이럴때 쓸 수 있는 방법을 소개하겠다.
myPackage.d.ts
파일은 지워주자~
tsconfig.js
파일 안에
allow
라는 프로퍼티를 입력하고 값을 true로 해주자!
타입스크립트 안에 자바스크립트를 허용한다.라는 의미이다.
그러면 기존의 파일들은 TS 의 보호를 받을 수 없을 것이다. 그러면 JS파일들은 어떻게 보호를 받을 수 있을까?!
@use JSDoc
이란 기능을 사용하면 되는데 params로 타입들을 지정해주면 Ts
의 보호를 받을 수 있다 정말 엄청난 기능이라고 할 수 있다.
//@ts
/**
*
* @param {object} config
* @param {string} config.url
* @param {string} config.def
* @returns {boolean}
*/
export function init(config) {
return true;
}
/**
*
* @param {number} code
* @returns {number}
*/
export function exit(code) {
return code + 1;
}
Ts
는 기존 JS
를 사용하는데 큰 변경이 필요없다는게 정말 큰 장점 중 하나 인거 같다. 대형 코드들은 원하는 것만 바꿀수도 있고!
build 와 start를 계속 수행하게 되면 처리가 느려질 수 있다. 그것을 도와주는 것이 바로 tsnode
와 nodemon
이다.
npm i -D ts-node
tsnode설치
package.json
script
부분에 아래 처럼 dev
추가
npm i nodemon
로 nodemon
설치
script
아래와 같이 추가
npm run dev
실행
그러면 출력 파일이 찍혀서 아래와 같이 나온다.
//index.ts
console.log("hello")
위에서 보았듯이 module을 import 해보자
import crypto from "crypto"
위와 같이 작성하면 오류가 발생한다.
import * as crypto from "crypto"
가독성이 영 별로다..! ㅡㅡ;
위에 ts-node를 설치 했으면 crypto오류가 나지 않을 수 있다. 하지만 다른 module에선 오류가 날 수 있으니 같은 방법으로 해결해주면 되겠다! 해결방법은 아까 처럼 d.ts
파일을 직접만들어주는건데..
이게 한두줄의 로직도 아니고 우리가 직접 만들기엔 보통일이 아니다! 하지만 개발자들은 다 편하고 쉬운 방법을 마들어 놓는법이다.
처음 부분에 d.ts 파일을 설정해줘야 그 패키지를 Ts
에서 사용할 수 있다고 했는데 우리의 친절한 개발자 커뮤니티는 이미 준비가 되어있었다!
npm i -D @types/"설정하고 싶은 패키지"
엄청 awesome한 사람들이 깃에 대 정리를 해놧다 ㅠㅠㅠㅠ
DefinitelyTyped
이곳에가면 다양한 타입들이 정의된 파일들이 많다.
crypto
오류 해결하기 위해
npm i -D @types/node
나는 빨간줄이 뜨지 않아서 그냥 패스했다!
이렇게 Js
모듈을 가져오는 법 Js
코드를 사용하는 법을 알아보았다.
1. lib
에 적어 놓기
2. d.ts
파일을 직접 만들어서 사용하기
3. jsDoc
을 활용해서 원하는 Js파일만 Ts로 적용하기
3. d.ts
파일을 내려 받아서 사용하기