타입스크립트는 자바스크립트에 타입을 부여한 언어이며 자바스크립트의 확장된 언어라고 볼 수 있다.
크게 두 가지가 있다.
1. 에러의 사전 방지
//math.js
function sum(a,b) {
return a+b;
}
sum(10,20) // 30
sum('10','20'); //1020
//math.ts
function sum(a:number, b:number){
return a+b;
}
sum('10','20') // Error: '10'은 number에 할당될 수 없습니다.
두번째 코드처럼 타입스크립트를 사용한 경우에는 의도하지 않은 코드의 동작을 예방할 수 있다.
12가지
// 기존의 javascript 문법
function sum(a,b) {
return a+b;
}
// typeScript 적용
function sum(a: number, b: number):number {
return a+b;
}
function sum(a: number, b: number): number {
return a+b;
}
sum(10,20) //30
sum(10,20,30) // error
sum(10) // error
타입스크립트에서는 함수의 인자를 모두 필수 값으로 간주하기 때문에 함수의 매개변수를 설정하면 'undefined'나 'null'이라도 인자로 넘겨야한다.
-> 정의된 매개변수 값만 받을 수 있고 추가로 인자를 받을 수 없다는 의미
정의된 매개변수의 갯수 만큼 인자를 넘기지 않아도 되려면
function sum(a: number, b?: number): number{
return a+b;
}
sum(10,20); //30
sum(10,20,30);// error
sum(10) // 10
function sum(a: number, ...nums: number[]): number {
const totalOfNums = 0;
for(let key in nums) {
totalOfNums += nums[key];
}
return a + totalOfNums;
}
function 함수명 (this: 타입) {
//...
}
interface Vue {
el: string;
count: number;
init(this: Vue): () => {};
}
let vm: Vue = {
el: '#app',
count: 10,
init: function(this: Vue) {
return () => {
return this.count;
}
}
}
let getCount = vm.init();
let count = getCount();
console.log(count); // 10
interface UIElement {
// 아래 함수의 `this: void` 코드는 함수에 `this` 타입을 선언할 필요가 없다는 의미
addClickListener(onclick: (this: void, e: Event) => void): void;
}
class Handler {
info: string;
onClick(this: Handler, e: Event) {
// 위의 `UIElement` 인터페이스의 스펙에 `this`가 필요없다고 했지만 사용했기 때문에 에러가 발생
this.info = e.message;
}
}
let handler = new Handler();
uiElement.addClickListener(handler.onClick); // error!
class Handler {
info: string;
onClick(this: void, e: Event) {
// `this`의 타입이 void이기 때문에 여기서 `this`를 사용할 수 없습니다.
console.log('clicked!');
}
}
let handler = new Handler();
uiElement.addClickListener(handler.onClick);