TypeScript
TypeScript는 좀 더 엄격한 JavaScript 코드를 만들기 위한 언어이다. 좀 더 엄격한 규칙을 가진 TypeScript 코드를 컴파일 하면 JavaScript 코드가 생성된다는 의미이다. 먼저 TypeScript를 작성하기위한 세팅을 진행해보자.
1. Install TypeScript
npm install typescript --save-dev
yarn add typescript --dev
먼저 npm 혹은 yarn으로 typescript를 설치한다.
{
"compilerOptions": {
"module": "commonjs",
"target": "ES2015",
"sourceMap": true,
"outDir": "dist"
},
"include": [
"index.ts"
],
"exclude": [
"node_modules"
]
}
작업 폴더에 tsconfig.json 파일을 생성 후 위와 같이 작성한다. 컴파일 시 추가적으로 지정하고 싶은 옵션이 있다면 tsconfig.json 파일을 변경하면 된다. 주요 설정의 내용은 다음과 같다.
- outDir : 컴파일 결과인 js 파일이 생성될 경로
- include: 컴파일 대상인 ts 파일. 여러 파일을 지정하거나 폴더 내의 파일 전체를 지정할 수 있다.
2. Write TypeScript
const name = "Cookies",
count = 3,
taste = "salty"
const describeTaste = (name: string, count: number, taste?: string): string => {
return `There are ${count} ${name}, It is ${taste}`;
};
describeTaste(name, count, taste);
export { };
TypeScript 코드는 위와 같은 형식으로 되어있다. index.ts에 위와 같이 코드를 쓰고 자세히 분석해보자.
먼저 describeTaste 함수를 자세히 살펴보자. JavaScript와 달리 파라미터의 타입을 지정해줄 수 있다. 위 코드에서는 name과 taste는 string, count는 number의 인자만 받을 수 있다. 또한 함수의 return 타입도 string으로 지정해준 것을 볼 수 있다.
TypeScript는 함수의 인자 갯수도 엄격히 따진다. 원래 JavaScript에선 describeTaste(); 와 같이 인자의 갯수를 맞추지 않고 호출하여도 함수 내에서 인자로 넘어오지 않은 파라미터는 undefined로 사용된다. 그러나 Typescript의 경우 함수 선언 시 파라미터의 갯수와 함수 호출 시 인자의 갯수를 맞추어주지 않으면 오류가 발생한다.
TypeScript에서 Optional한 파라미터는 ? 문자로 표현한다. 위 코드의 경우 taste? 라 표현되어있으므로, describeTaste("Kimchi", 2) 라 호출해도 오류가 발생하지 않는다.
interface Human {
name: string;
age: number;
}
class Student implements Human {
public name: string;
public age: number;
public level: number;
constructor(name: string, age: number, level?: number) {
this.name = name;
this.age = age;
this.level = level;
}
}
const ihl = new Student("ihl", 33);
const sayHi = (person: Human): string => {
return `I am ${person.name}. ${person.age} years old`;
};
TypeScript는 Class와 Interface 기능도 제공한다. JAVA의 interface와 class처럼 TypeScript에서도 interface에서 class에서 어떤 프라퍼티와 메소드가 필요한지 명시적으로 선언한 후 class에서 implements 키워드로 연결한 후 실제로 프라터피와 메소드를 구현한다.
const ihl:Student = new Student("ihl", 33);
const students: [Student] = [ihl];
TypeScript는 변수와 배열의 타입도 지정 가능하다. 위 코드에서 students.push("hello")는 오류가 발생한다. students는 Student 타입의 배열이라고 선언하였기 때문이다.
3. Run TypeScript
npm run tsc
yarn tsc
위 명령어는 .ts 파일을 .js 파일로 컴파일한다. 이 때 컴파일 대상이 되는 파일은 tsconfig.json의 include 필드에 적어준 파일들이며, 변환된 파일은 node 명령어로 실행할 수 있다.
"scripts": {
"prestart": "yarn tsc", //or npm run tsc
"start": "node ./dist/index.js"
}
yarn start(혹은 npm start) 라는 명령어로 ts파일의 컴파일과 실행을 동시에 하려면 package.json에서 위와 같이 적어줄 수 있다. 작성 후 명령 창에서 yarn start 를 입력하면 yarn tsc가 실행된 후 node dist/index.js가 실행된다.
nodeJS로 서버코드를 작성할 때 코드 변경 시 바로 재컴파일 해주는 nodemon이 있었듯이 TypeScript에도 tsc-watch가 있다. 필요하다면 해당 패키지를 설치 후 package.json을 변경해주면 된다.
참고 영상:
www.youtube.com/watch?v=-dyrcJr5NiQ&list=PL7jH19IHhOLNM5mePXxbpnPefi6PiiNCX&index=2