타입스크립트와 타입스크립트의 타입에 대해서 알아보자.
드림코딩 타입스크립트와 문서를 보면서 정리하였습니다.
타입스크립트는 MS 사에서 개발한 프로그래밍 언어로서 2012년 10월에 출시되었다. 오픈 소스 프로젝트 프로그래밍 언어로서 어느 자바스크립트가 동작하는 어느 브라우저나 호스트 운영체제에서도 동작한다.
TypeScript는 ES5의 Superset이므로 기존의 자바스크립트(ES5) 문법을 그대로 사용할 수 있다. 또한, ES6의 새로운 기능들을 사용하기 위해 Babel과 같은 별도 트랜스파일러(Transpiler)를 사용하지 않아도 ES6의 새로운 기능을 기존의 자바스크립트 엔진(현재의 브라우저 또는 Node.js)에서 실행할 수 있다.
https://poiemaweb.com/img/typescript-superset.png
자바스크립트(Javascript)는 dynamcially typed의 언어로서 런타임 때 타입이 결정되며 유연한 반면에 타입스크립트(typescript)는 statically typed 언어로 한번 결정된 타입은 바뀔 수 없고, 컴파일 과정에서 타입에 대한 오류를 발견하며 에러를 찾아낼 수 있다. 타입스크립트가 뜨는 이유가 여러가지가 있겠지만 크게 보면 2가지로 나눠 볼 수 있다.
function sum(a,b){
return a + b;
}
sum(10,20); // 30
sum('10','20'); //1020
function sum(a: number, b: number) {
return a + b;
}
sum(10,20); // 30
sum('10','20'); // 1번
위의 예시는 간단한 숫자의 합을 구하는 함수로 자바스크립트와 타입 스크립트로 작성한 예시이다.
자바스크립트의 위의 예를 보면 문자열이 파라미터로 들어온다면, 문자열을 더해 1020이라는 문자열의 값이 나오는데 , 이는 우리가 의도한 흐름이 아닐 것이다. 반면에 타입스크립트로 작성했 을 시에 1번의 결과는 어떻게 나올까?
error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'. 이런 에러가 나올 것이다.
컴파일 과정에서 오류가 나오면서 우리가 의도치 않은 코드의 동작을 예방 할 수 있다. 이 예시는 간단하지만, 비교적 큰 프로젝트나 작업과정에 있어서 확실하게 타입이 보장되면 어떤 파라미터가 들어오는 지도 유추가 가능하고, 이러한 의도한 흐름되로 코드를 작성하는데 도움을 줄 수 있다.
즉 , 컴파일 단계에서 오류를 포착할 수 있는 장점이 있으며, 명시적인 타입 지정은 개발자의 의도를 명확하게 코드로 기술할 수 있고, 코드의 가독성을 높이고 예측할 수 있게 하며 디버깅이 쉬워진다는 장점이 있다.
OOP의 원칙에 따라 객 체 위주로 모듈성 있는 코드를 작성할 수 있고, 모듈별로 원하는 부분을 재사용이 가능하다. 그리고 객체 단뒤로 프로그래밍 하면서 객체 단위로 작성하여 확장성을 높이고 유지보수성을 높일 수 있다.
const num: number = 2022;
const str: string = 'hello wrold';
const bool: boolean = false;
undefined
로 선언된 변수에는 undefined
외에는 지정이 불가하기 때문에, 단독으로undefined
타입 지정은 해주지는 않는다.let name: undefined; // 💩 not good -> useless
name = 'nike' // error
이처럼 name에 문자열을 할당하면 에러가 발생한다.
타입이
string
일 수도 있고,undefined
일 수도 있다면union type
을 사용하자.
let age: number | undefined;
age = undefined;
age = 1;
// 함수의 경우를 예시로 보면 아래 함수는 number를 리턴할 수도 있고, undefined를 리턴할 수도 있다.
const onlyOne = function (): number | undefined {
return 1 || undefined;
};
undefined
와 마찬가지로null
타입 지정을 일반적으로 단독적으로 해주지는 않는다.null
은 undefined
와 비슷한 맥락으로 값이 없다는 것이지만 명시적으로(의도적으로) 값이 없음을 나타낸다.let person: null; // 💩 not good -> useless poop code!
let person2: string | null;
person = null;
person2 = 'hello';
let notSure: unknown = 0;
notSure = 'he';
notSure = true;
let notSure: unknown = 0;
notSure = 'he';
notSure = true;
function print(): void {
console.log('hello');
return;
}
let unusable:void = undefined; // 💩 not good -> useless poop code! void로 선언할 시 undefined만 할당이 가능하므로 활용도가 없다.
// 예를 들어 에러 핸들링의 경우,
function throwError(message: string): never {
// message -> server (log)
throw new Error(message);
while (true) {} // 무한 반복문의 경우
}
// objet
let obj: object; // 💩
let objTest: objct = [1,2,3];
obj = { test: 'test'}
function acceptSomeObject(obj: object) {}
acceptSomeObject({ name: 'ellie' });
acceptSomeObject({ animal: 'dog' });
https://www.typescriptlang.org/docs/handbook/intro.html
드림코딩 typescript