자료조사 : 타입스크립트(TypeScript)
2021. 10. 19. 21:51ㆍBlockchain/Project - Coin Swap
- 타입스크립트란?
* 자바스크립트에 타입을 부여한 언어
- 사용 이유
* 에러의 사전 방지
* 개발 생산성 향상
* 완전한 객체 지향 프로그래밍 환경을 조성하기 위해
- 기본 타입
※ 타입 표기(Type Annotation) : 자바스크립트 코드에 타입을 정의하는 방식
더보기
- Boolean
- let str: string = 'hi';
- Number
let num: number = 10;
- String
let isLoggedIn: boolean = false;
- Object
- Array
let arr: number[] = [1,2,3]; // 또는 let arr: Array<number> = [1,2,3];
- Tuple : 배열의 길이가 고정되고 각 요소의 타입이 지정되어 있는 배열 형식
let arr: [string, number] = ['hi', 10]; // 정의하지 않은 타입이나 인덱스로 접근할 경우 오류 발생 arr[1].concat('!'); // Error, 'number' does not have 'concat' arr[5] = 'hello'; // Error, Property '5' does not exist on type '[string, number]'.
- Enum : 특정 값(상수)들의 집합을 의미
enum Avengers { Capt, IronMan, Thor } let hero: Avengers = Avengers.Capt; // 인덱스 번호로 접근 가능 enum Avengers { Capt, IronMan, Thor } let hero: Avengers = Avengers[0]; // 인덱스를 사용자 편의로 변경하여 사용 가능 enum Avengers { Capt = 2, IronMan, Thor } let hero: Avengers = Avengers[2]; // Capt let hero: Avengers = Avengers[4]; // Thor
- Any : 모든 타입에 대해 허용
let str: any = 'hi'; let num: any = 10; let arr: any = ['a', 2, true];
- Void : 변수에는 undefined와 null만 할당, 함수에는 반환 값을 설정할 수 없는 타입
let unuseful: void = undefined; function notuse(): void { console.log('sth'); }
- Null
- Undefined
- Never: 함수의 끝에 절대 도달하지 않는다는 의미를 지닌 타입
function neverEnd(): never { while (true) { } }
- 함수
더보기
- 함수의 타입 선언
기존 자바스크립트 함수의 선언 방식에서 매개변수와 함수의 반환 값에 타입을 추가
※ 함수의 반환 값에 타입을 정하지 않을 때는 void라도 사용
// js function sum(a, b) { return a + b; } // ts function sum(a: number, b: number): number { return a + b; }
- 함수의 인자
타입스크립트에서 함수는 인자값이 필수적이며, 함수의 매개변수를 설정하게되면 undefined나 null(위에서 설명한 void 타입)이라도 인자로 넘겨야 함
위와 같은 특성은 정의된 매개변수의 갯수 만큼 인자를 넘기지 않아도 되는 자바스크립트의 특성과 반대되며, 이러한 특성을 타입스크립트에서도 살리고 싶다면 ' ? '를 이용해서 아래와 같이 정의할 수 있음function sum(a: number, b: number): number { return a + b; } sum(10, 20); // 30 sum(10, 20, 30); // error, too many parameters sum(10); // error, too few parameters
매개변수 초기화는 ES6 문법과 동일function sum(a: number, b?: number): number { return a + b; } sum(10, 20); // 30 sum(10, 20, 30); // error, too many parameters sum(10); // 10
- REST 문법이 적용된 매개변수
타입스크립트에서의 Rest 문법 (아래)
function sum(a: number, ...nums: number[]): number { const totalOfNums = 0; for (let key in nums) { totalOfNums += nums[key]; } return a + totalOfNums; }
- this
타입스크립트에서는 자바스크립트의 this가 잘못 사용되었을 때 감지할 수 있음
타입스크립트에서 this가 가리키는 것을 명시하려면 아래와 같은 문법을 사용합니다.
예제)function 함수명(this: 타입) { // ... }
위 코드를 타입스크립트로 컴파일 했을 때는 --noImplicitThis 옵션이 있더라도 에러가 발생하지 않음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와는 다르게 콜백으로 함수가 전달되었을 때의 this를 구분해줘야 할 때는 아래와 같이 강제 할 수 있음
만약 UIElement 인터페이스의 스펙에 맞춰 Handler를 구현하려면 아래와 같이 변경※ 클래스의 메서드 방식으로 선언하는 것과 변수에 화살표 함수를 연결하는 것의 차이점!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);
- 인터페이스
더보기
ㅇㅇ
- 이넘
더보기
ㅇㅇ
'Blockchain > Project - Coin Swap' 카테고리의 다른 글
자료 조사 : 도커(Docker), 카이트메틱(Kitematic) 설치 및 실행 (0) | 2021.11.02 |
---|---|
Lottery Dapp 개발 실습 (0) | 2021.10.26 |
타입스크립트(TypeScript) 컴파일러(Compiler)와 ts-node 설치 및 실행 방법 (0) | 2021.10.25 |
자료 조사 : 트렐로(Trello) (0) | 2021.10.21 |
자료 조사 : 도커(Docker)란? (0) | 2021.10.19 |