이번 포스팅에서는 타입스크립트 소개와 간단한 사용법에 대해 알아보겠습니다.
1. 타입스크립트란?
Javascript의 변수에 형(Type)을 부여해주고 그와 관련된 문법 검사를 해주는 것
특징
1) Javascript에 타입 기능을 추가하는것 (string, boolean, int 등)
2) 실시간 에러 처리
3) 오픈소스이며 정적타입 추가에 가장많이 사용되는 툴
4) 브라우저, OS에 독립적
5) .js 코드나 .ts 코드는 결과적으로는 동일하게 작동함
2. 왜 사용해야 할까?
1) Javascript에는 변수에 타입을 명시 할수있는 기능이 없다는 단점을 해결 가능함
ex) 함수나 변수명만으로는 그 타입을 한번에 알기 어렵다
2) 에디터에서 코드를 작성하면서 동시에 자동으로 문법오류 체크가 가능함
3. Javascript 를 위한 Typescript 시작하기
VSCode 환경에서 npm으로 타입스크립트 설치하기
3-1. 타입스크립트를 적용하기를 원하는 디렉터리에서 package.json 파일 생성
npm init y
3-2. npm을 통해 타입스크립트 설치하기
npm install typescript --save-dev
3-3. .ts 파일 생성 후 작동 확인
* ':타입' 을 통해 원하는 형(Type)을 명시할 수 있다.
3-4. npx tsc
타입스크립트 코드를 자바스크립트로 트랜스파일 하는 명령어이다.
npx tsc
npx tsc ./src/main.ts
4. Typescript 기본적인 사용법
* 사용가능한 타입 : boolean, bigint, null, number, string, object, undefined, any, never, tuple, array, void
4-1. 타입 선언
let helloWorld: string = 'Hello World';
helloWorld = 123;
let strHelloWorld = 'Hello World';
이제 helloWorld 변수는 string 형식임을 타입스크립트가 검사하고 있다.
타입 스크립트로 인해 strHelloWorld 와 같이 변수가 어떤 타입인지 변수 명으로 명시를 할 필요가 없어졌다.
4-2. 객체지향성을 활용한 타입 명시
객체 원소값들의 타입을 명시하고 싶을때는 어떻게 해야할까?
const user = { name: "Kim", id: 0, }
위와 같은 user 객체가 name은 string, id는 number 타입을 가지게 하는 방법은 인터페이스를 이용하면 된다.
interface User { name: string; id: number; }
이제 변수에 User 타입을 명시하게 되면 name은 string, id는 number 타입을 가져야 한다.
Interface를 잘 정의 해놓으면 아래와 같이 여러번 재사용가능하다.
interface User { name: string, id: number };
const user: User = { name: "Kim", id: 0, };
const getUser = (): User => {
return user;
}
const setUser = (name: string, id: number) => {
user.name = name;
user.id = id;
}
4-3. 타입 구성하기
간단한 타입을 활용하여 복잡한 새로운 타입을 만들수있다.
Unions, Generics 두 가지가 주로 활용된다.
- Unions
* 새로운 타입 선언 명령어 : type 변수명 = 값 | 값 ...
type MyBool = true | false;
type WindowStates = "open" | "closed" | "minimized";
type LockStates = "locked" | "unlocked";
type OddNumbersUnderTen = 1 | 3 | 5 | 7 | 9;
이런식으로 활용가능한데 위와같이 정의한다면 정한 변수만을 사용해야 한다.
- Generics
Array에 입력되는 값의 타입을 명시할 수 있다. (C++ 에서 vector를 선언하는것과 비슷하다.)
type StringArray = Array<string>;
type NumberArray = Array<number>;
type ObjectWithNameArray = Array<{ name: string }>;
인터페이스로 사용자 정의의 Generics를 만들 수 있다.
interface Backpack<Type> {
add: (obj: Type) => void;
get: () => Type;
}
// backpack 은 string 타입으로 선언
declare const backpack: Backpack<string>;
backpack.add('something');
// object 는 string 타입을 얻음
const object = backpack.get();
* declare : Backpack<Type>의 Type을 사용자 정의 타입으로 선언하기 위해 사용
4-4. 구조적 타입 시스템
타입스크립트는 실제로 타입을 명시해서 타입을 정의할 수 있지만 인터페이스의 구조적 형태로 타입을 자동지정할 수 있다.
이와같은 방식을 "shape matching", "duck typing”, “structural typing” 이라고 한다.
예제 1) 함수를 정의한 예제는 아래와 같다.
interface Point { x: number, y: number }
const printPoint = (p: Point) => {
console.log(`X : ${p.x}, Y : ${p.y}`);
}
let pos = {x: 1, y: 2};
printPoint(pos);
위 코드에서 pos:Point 로 타입을 명시하지 않아도 오류가 발생하지 않음을 알 수 있다.
예제 2) 클래스를 정의한 내용은 아래와 같다.
class Point {
x: number;
y: number;
constructor(x: number, y: number) {
this.x = x;
this.y = y;
}
printPoint(x: number, y: number) {
alert(`X : ${x}, Y : ${y}`);
}
}
const pos = new Point(12, 24);
pos.printPoint(pos.x, pos.y);
Class도 타입을 명시하지 않아도 동일하게 작동하는 것을 알 수 있다. (pos: Point가 없음)
- 참고한 사이트
1. Typescript
2. Typescript 핸드북
https://www.typescriptlang.org/docs/handbook/typescript-in-5-minutes.html
'웹 프론트엔드 > React' 카테고리의 다른 글
React 는 왜 프레임워크가 아니라 라이브러리일까? (1) | 2020.09.16 |
---|---|
웹 개발 시 React 를 선택해야하는 이유 (0) | 2020.09.15 |
Jest 시작해보기 (0) | 2020.08.20 |
일관성 있는 코드 포맷팅을 위한 ESLint 톺아보기 (0) | 2020.08.19 |
트랜스파일을 위한 바벨(Babel) 예제 만들어보기 (0) | 2020.08.13 |
댓글