일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 항해99 사전스터디
- toggle-btn
- next js
- js배열 알고리즘
- Js module
- 리액트 렌더링 최적화
- v8 원리
- 리액트 메모
- 리액트
- 웹팩 기본개념
- 실행컨텍스트
- 렌더링 최적화
- 자바스크립트 엔진 v8
- 항해99 미니프로젝트
- 테스트 코드 툴 비교
- 코어자바스크립트
- 리액트 메모이제이션
- 알고리즘
- 항해99
- jwt
- 타입스크립트
- this
- 항해99 부트캠프
- JS module system
- 리덕스
- 함수형 프로그래밍 특징
- 웹 크롤링
- chromatic error
- FP 특징
- gql restapi 차이
- Today
- Total
Jaeilit
타입스크립트 - 기본타입 + 함수 본문
타입스크립트를 쓰는 이유?
자바스크립트는 인터프리티어
자바스크립트는 알다시피 타입을 정의하지 않고 사용한다.
타입이 틀리다면, 오류가 있다면 브라우저에서 콘솔에서야 확인할 수 있다.
이유는 자바스크립트는 인터프리티어이기 때문이다.
인터프리티어란 컴파일 과정을 거치지 않고 바로바로 실행하는 것을 이야기한다.
브라우저 개발자도구에서 conosole.log() 하면 바로 출력이 나오듯이 컴파일 과정이 필요가 없기 때문에
브라우저에 와서야 타입오류를 발견 할 수 있다.
타입스크립트는 자바스크립트의 타입을 정의하고 타입스크립트 컴파일러 또는 바벨을 통해 자바스크립트 코드로 변환한다.
코딩 중에도 타입에러를 발견 할 수 있기 때문에 에러를 사전에 방지할 수 있고, 미리 정의해둔 타입에 대해서는 자동완성 기능도 주어진다.
하지만 코드량이 증가하기 때문에 컴파일 시간이 오래 걸린다는 단점도 있습니다.
기본타입은 12가지가 있다.
- Boolean : true, false
- Number : 숫자형
- String : 문자형
- Object : 객체형
- Array : 배열
- Tuple : 배열 길이가 고정되고 각 요소의 타입이 지정되있는 배열 형식, 정의 되지 않는 타입, 인덱스로 접근 할 경우 오류가 발생
- Enum : 특정 값(상수)들의 집합을 의미, 각 요소에 인덱스처럼 번호가 주어진다.
- Any : 모든 타입을 허용
- Void : undefined 와 null 만 할당하고, return 이 없는 함수에 선언
- Null : Null
- Undefined : Undefined
- Never : 함수의 끝에 절대 도달하지 않는다는 의미?
1) 함수
함수에서 타입은 3가지로 정의 할 수 있다.
- 파라미터의 타입
- 반환 타입
- 구조 타입
function sum(a, b) {
return a + b;
}
function sum(a: number, b: number): number {
return a + b;
}
- 매개변수 a, b 의 타입 정의
- 반환 타입은 return 이 있는 곳이 아닌 파라미터 오른쪽에 : type 을 정의해준다. return 이 없다면 void 를 사용한다.
- 구조의 타입 - 매개변수 이외에는 변수가 없으므로 생략한다.
만약 파라미터의 갯수가 맞지 않게 들어온다면 undefined 나 null 이 아닌 error 가 발생한다.
1-1 rest)
배열의 타입만 잘 정해주면 REST 문법도 사용가능하다.
function sum(a: number, ...nums: number[]): number {
const totalOfNums = 0;
for (let key in nums) {
totalOfNums += nums[key];
}
return a + totalOfNums;
}
1-2 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
this 역시 타입만 잘 정의해준다면 사용 할 수 있다.
여기서 this는 vm의 메서드로 init 함수가 호출됬고 this 바인딩은 vm의 환경변수 el, count, init 함수를 담는다.
init 이 this로 count 를 찾을때 init 함수의 스코프 레벨에서 찾아서 count 의 10을 찾을 수 있는 것임
메서드가 아닌 순수함수 또는 화살표함수는 this 바인딩이 되지않는다.
1-3) 콜백에서의 this
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;
}
}
const uiElement = {
addClickListener: () => {}
}
let handler = new Handler();
uiElement.addClickListener(handler.onClick); //
addClickListener의 인자로 함수를 받아서 콜백함수를 만들었습니다.
콜백함수가 된 onClick 의 매개변수로 this 의 타입으로 void를 선언했는데
Handler에 정의 된 onClick 은 Handler 라는 타입을 보내주고 있네요 당연히 에러입니다.
수정)
class Handler {
info: string;
onClick(this: void, e: Event) {
// `this`의 타입이 void이기 때문에 여기서 `this`를 사용할 수 없습니다.
console.log('clicked!');
}
}
let handler = new Handler();
uiElement.addClickListener(handler.onClick);
똑같이 콜백함수의 매개변수 this 의 타입도 void 로 맞춰줘야 합니다.
정리,
자바스크립트는 인터프리티어로 컴파일 하지 않으며 오류는 브라우저가 실행되서야 알 수 있다.
타입스크립트를 이용하면 타입스크립트의 컴파일러 또는 바벨의 도움으로 코딩 중에도 오류를 검출 할 수있고 미리 정의해둔 타입은 자동완성 기능이라는 소소하지만 많은 도움이 되는 기능이 생긴다. api 콜 할때 도움이 많이 됨,
기본타입에는 12가지가 있으며
ex) let a :string = 'abc'
바로 위의 예시와 같이 간단하고 직관적인 타입 이외에
다소 헷갈릴수 있는 함수의 매개변수나 return의 타입 또는 this, 콜백의 this등도
자신이 정의해둔 타입이 아닌 이상 무조건적으로 error 가 발생한다.
'타입스크립트' 카테고리의 다른 글
배열 값을 순회하는 타입 만들기 (0) | 2022.12.13 |
---|---|
타스 - 타입 추론/호환 (0) | 2022.06.29 |
Union Types (0) | 2022.06.22 |
이넘(Enums) (0) | 2022.06.21 |
인터페이스 (0) | 2022.06.19 |