# ts-for-jsdev

## ts-for-jsdev

- [자바스크립트 개발자를 위한 타입스크립트](https://ahnheejong.gitbook.io/ts-for-jsdev/master.md)
- [들어가며](https://ahnheejong.gitbook.io/ts-for-jsdev/intro.md)
- [1.0 들어가며](https://ahnheejong.gitbook.io/ts-for-jsdev/01-introducing-typescript/intro.md): 타입스크립트란 무엇인지 알아보고, 그 역사와 더불어 왜 타입스크립트를 배워야 하는지에 대한 근거를 제시한다.
- [1.1 정적 타입 분석](https://ahnheejong.gitbook.io/ts-for-jsdev/01-introducing-typescript/static-type-analysis.md)
- [1.2 왜 타입스크립트인가](https://ahnheejong.gitbook.io/ts-for-jsdev/01-introducing-typescript/why-typescript.md)
- [1.3 타입스크립트의 구성요소](https://ahnheejong.gitbook.io/ts-for-jsdev/01-introducing-typescript/elements-of-typescript.md)
- [1.4 타입스크립트의 역사](https://ahnheejong.gitbook.io/ts-for-jsdev/01-introducing-typescript/history-of-typescript.md)
- [2.0 ECMAScript](https://ahnheejong.gitbook.io/ts-for-jsdev/02-ecmascript/intro.md): 타입스크립트의 기반이 되는 언어 ECMAScript 최신 명세에 추가된 여러 유용한 기능들을 살펴본다.
- [2.1 블록 수준 스코프](https://ahnheejong.gitbook.io/ts-for-jsdev/02-ecmascript/block-level-scope.md)
- [2.1.1 let을 이용한 선언](https://ahnheejong.gitbook.io/ts-for-jsdev/02-ecmascript/block-level-scope/declaration-using-let.md): let을 이용해 재할당이 가능한 블록 레벨 변수를 선언할 수 있다.
- [2.2.2 const를 이용한 선언](https://ahnheejong.gitbook.io/ts-for-jsdev/02-ecmascript/block-level-scope/declaration-using-const.md): const를 이용해 재할당이 불가능한 블록 레벨 변수를 선언할 수 있다.
- [2.2.3 스코프 베스트 프랙티스](https://ahnheejong.gitbook.io/ts-for-jsdev/02-ecmascript/block-level-scope/scope-best-practice.md)
- [2.2 객체와 배열](https://ahnheejong.gitbook.io/ts-for-jsdev/02-ecmascript/object-and-array.md)
- [2.2.1 비구조화 할당](https://ahnheejong.gitbook.io/ts-for-jsdev/02-ecmascript/object-and-array/destructuring-assignment.md): 비구조화 할당 문법을 이용해 이전까지 여러 라인에 걸쳐 적어야만 했던 할당을 보다 간결하게 쓸 수 있다.
- [2.2.2 나머지 연산자와 전개 연산자](https://ahnheejong.gitbook.io/ts-for-jsdev/02-ecmascript/object-and-array/rest-and-spread-operator.md)
- [2.2.3 객체 리터럴 변경사항](https://ahnheejong.gitbook.io/ts-for-jsdev/02-ecmascript/object-and-array/object-literal-diff.md): 최신 ECMAScript에서의 객체 리터럴 변경사항에 대해 다룬다.
- [2.3 함수](https://ahnheejong.gitbook.io/ts-for-jsdev/02-ecmascript/function.md): 최신 ECMAScript 명세에서 자바스크립트 함수에 어떤 변경점이 있었는지 알아본다.
- [2.3.1 기본 매개변수](https://ahnheejong.gitbook.io/ts-for-jsdev/02-ecmascript/function/default-parameter.md): ES6 기본 매개변수 문법을 사용해 매개변수의 기본값을 간결하게 표현할 수 있다.
- [2.3.2 화살표 함수](https://ahnheejong.gitbook.io/ts-for-jsdev/02-ecmascript/function/arrow-functions.md): 화살표 함수는 자바스크립트 함수 내부에서 this가 야기하는 혼란을 줄여준다.
- [2.4 템플릿 리터럴](https://ahnheejong.gitbook.io/ts-for-jsdev/02-ecmascript/template-literal.md)
- [2.4.1 멀티라인 문자열](https://ahnheejong.gitbook.io/ts-for-jsdev/02-ecmascript/template-literal/multiline-string.md): 템플릿 리터럴을 이용해 여러 줄에 걸친 문자열을 손쉽게 표현할 수 있다.
- [2.4.2 문자열 치환](https://ahnheejong.gitbook.io/ts-for-jsdev/02-ecmascript/template-literal/string-substitution.md): 템플릿 리터럴은 문자열의 일부를 특정 값으로 치환할 수 있는 수단을 제공한다.
- [2.5 원소 순회](https://ahnheejong.gitbook.io/ts-for-jsdev/02-ecmascript/element-enumeration.md): 최신 ECMAScript 명세에 추가된 원소 순회 수단에 대해 알아본다.
- [2.5.1 forEach 메소드](https://ahnheejong.gitbook.io/ts-for-jsdev/02-ecmascript/element-enumeration/foreach.md)
- [2.5.2 for-of 문법](https://ahnheejong.gitbook.io/ts-for-jsdev/02-ecmascript/element-enumeration/for-of.md)
- [2.5.3 이터레이터 프로토콜](https://ahnheejong.gitbook.io/ts-for-jsdev/02-ecmascript/element-enumeration/iterator-protocol.md)
- [2.5.4 이터러블 프로토콜](https://ahnheejong.gitbook.io/ts-for-jsdev/02-ecmascript/element-enumeration/iterable-protocol.md)
- [2.6 비동기 처리](https://ahnheejong.gitbook.io/ts-for-jsdev/02-ecmascript/handling-asynchronous.md)
- [2.6.1 프로미스](https://ahnheejong.gitbook.io/ts-for-jsdev/02-ecmascript/handling-asynchronous/promises.md)
- [2.6.2 Async / Await](https://ahnheejong.gitbook.io/ts-for-jsdev/02-ecmascript/handling-asynchronous/async-await.md)
- [2.7 맺으며](https://ahnheejong.gitbook.io/ts-for-jsdev/02-ecmascript/outro.md)
- [3.0 타입스크립트 기초 문법](https://ahnheejong.gitbook.io/ts-for-jsdev/03-basic-grammar/intro.md)
- [3.1 기본 타입](https://ahnheejong.gitbook.io/ts-for-jsdev/03-basic-grammar/primitive-types.md): 타입스크립트가 제공하는 기본 타입을 살펴본다. 이후 다룰 모든 타입은 이 기본 타입들로부터 파생된다.
- [3.2 배열과 튜플](https://ahnheejong.gitbook.io/ts-for-jsdev/03-basic-grammar/array-and-tuple.md): 순서가 있는 원소의 모음(collection)을 나타내는 가장 간단하면서도 유용한 자료구조인 배열, 그리고 그 사촌 튜플을 나타내는 타입에 대해 다룬다.
- [3.3 객체](https://ahnheejong.gitbook.io/ts-for-jsdev/03-basic-grammar/object.md): 자바스크립트에서 가장 일반적이고 널리 사용되는 자료 구조인 객체의 타입에 대해 다룬다.
- [3.4 타입 별칭](https://ahnheejong.gitbook.io/ts-for-jsdev/03-basic-grammar/type-alias.md): 타입 별칭(type alias)을 이용해 이미 존재하는 타입에 다른 이름을 붙여 복잡한 타입을 간단하게 쓸 수 있다. 또한, 프로그래머의 의도를 보다 명확하게 나타낼 수 있다.
- [3.5 함수](https://ahnheejong.gitbook.io/ts-for-jsdev/03-basic-grammar/function.md): 자바스크립트 프로그램에서 가장 핵심적인 역할을 차지하는 함수 타입이 타입스크립트에서 어떻게 표현되는지 다룬다.
- [3.6 제너릭](https://ahnheejong.gitbook.io/ts-for-jsdev/03-basic-grammar/generics.md): 제너릭을 이용해 여러 타입에 대해 동일한 규칙을 갖고 동작하는 타입을 손쉽고 우아하게 정의할 수 있다.
- [3.7 유니온 타입](https://ahnheejong.gitbook.io/ts-for-jsdev/03-basic-grammar/union-type.md): 유니온 타입을 이용해 “여러 경우 중 하나”인 타입을 표현할 수 있다.
- [3.8 인터섹션 타입](https://ahnheejong.gitbook.io/ts-for-jsdev/03-basic-grammar/intersection-type.md): 인터섹션 타입을 이용해 “여러 경우에 모두 해당”하는 타입을 표현할 수 있다.
- [3.9 열거형](https://ahnheejong.gitbook.io/ts-for-jsdev/03-basic-grammar/enums.md): 유한한 경우의 수를 갖는 값의 집합을 표현하기 위해 사용하는 열거형(enum) 타입에 대해 배운다.
- [4.0 들어가며](https://ahnheejong.gitbook.io/ts-for-jsdev/04-interface-and-class/intro.md): 타입스크립트에서 가장 중요하고 자주 쓰이는 두 추상화 수단, 인터페이스와 클래스에 대해 다룬다.
- [4.1 인터페이스 기초](https://ahnheejong.gitbook.io/ts-for-jsdev/04-interface-and-class/interface-basics.md): 인터페이스의 기초적인 개념과 용례를 알아본다.
- [4.2 색인 가능 타입](https://ahnheejong.gitbook.io/ts-for-jsdev/04-interface-and-class/indexable-types.md): 동적인 색인을 표현하는 색인 가능 타입에 대해 다룬다.
- [4.3 인터페이스 확장](https://ahnheejong.gitbook.io/ts-for-jsdev/04-interface-and-class/extending-interfaces.md): 한 인터페이스가 다른 인터페이스를 확장하는 상황에 대해 이야기한다.
- [4.4 클래스](https://ahnheejong.gitbook.io/ts-for-jsdev/04-interface-and-class/classes.md): 객체 지향적 구조화 수단인 클래스에 대해 다룬다.
- [4.5 클래스 확장](https://ahnheejong.gitbook.io/ts-for-jsdev/04-interface-and-class/extending-classes.md)
- [4.6 클래스 심화](https://ahnheejong.gitbook.io/ts-for-jsdev/04-interface-and-class/class-advanced.md)
- [4.6.1 스태틱 멤버](https://ahnheejong.gitbook.io/ts-for-jsdev/04-interface-and-class/class-advanced/static-members.md)
- [4.6.2 접근 제어자](https://ahnheejong.gitbook.io/ts-for-jsdev/04-interface-and-class/class-advanced/access-specifiers.md)
- [4.6.3 접근자](https://ahnheejong.gitbook.io/ts-for-jsdev/04-interface-and-class/class-advanced/accessors.md)
- [4.6.4 추상 클래스](https://ahnheejong.gitbook.io/ts-for-jsdev/04-interface-and-class/class-advanced/abstract-classes.md)
- [4.7 인터페이스와 클래스의 관계](https://ahnheejong.gitbook.io/ts-for-jsdev/04-interface-and-class/connecting-interface-and-class.md): 인터페이스와 클래스가 서로 어떤 방식으로 의존할 수 있는지에 대해 이야기한다.
- [4.8 맺으며](https://ahnheejong.gitbook.io/ts-for-jsdev/04-interface-and-class/outro.md)
- [5.0 들어가며](https://ahnheejong.gitbook.io/ts-for-jsdev/05-type-compatibility/intro.md): 다양한 타입 간의 호환성(compatibility), 보다 구체적으로는 타입 간의 할당 가능성(assignability)에 대해 다루어 본다.
- [5.1 기본 타입의 호환성](https://ahnheejong.gitbook.io/ts-for-jsdev/05-type-compatibility/primitive-types.md): 타입스크립트가 기본 타입 간의 호환성을 판단하는 법에 대해 다룬다.
- [5.2 객체 타입의 호환성](https://ahnheejong.gitbook.io/ts-for-jsdev/05-type-compatibility/objects.md): 타입스크립트가 객체 타입 간의 호환성을 판단하는 법에 대해 다룬다.
- [5.3 함수 타입의 호환성](https://ahnheejong.gitbook.io/ts-for-jsdev/05-type-compatibility/functions.md): 타입스크립트가 함수 타입 간의 호환성을 판단하는 법에 대해 다룬다.
- [5.4 클래스의 호환성](https://ahnheejong.gitbook.io/ts-for-jsdev/05-type-compatibility/classes.md): 타입스크립트가 클래스 간의 호환성을 판단하는 법에 대해 다룬다.
- [5.5 제너릭의 호환성](https://ahnheejong.gitbook.io/ts-for-jsdev/05-type-compatibility/generics.md): 타입스크립트가 제너릭 타입 간의 호환성을 판단하는 법에 대해 다룬다.
- [5.6 열거형의 호환성](https://ahnheejong.gitbook.io/ts-for-jsdev/05-type-compatibility/enums.md): 타입스크립트가 열거형 간의 호환성을 판단하는 법에 대해 다룬다.
- [5.7 맺으며](https://ahnheejong.gitbook.io/ts-for-jsdev/05-type-compatibility/outro.md)
- [6.0 들어가며](https://ahnheejong.gitbook.io/ts-for-jsdev/06-type-system-deepdive/intro.md): 6장에서는 타입스크립트의 타입 시스템에 대해 심도있게 다룬다.
- [6.1 타입 좁히기](https://ahnheejong.gitbook.io/ts-for-jsdev/06-type-system-deepdive/type-narrowing.md): 타입스크립트가 타입을 보다 좁은 타입으로 좁히는 다양한 상황에 대해 알아본다.
- [6.2 타입 추론](https://ahnheejong.gitbook.io/ts-for-jsdev/06-type-system-deepdive/type-inference.md): 컴파일러는 타입 추론을 통해 명시적인 타입 표기 없이도 타입 정보를 이해할 수 있다.
- [6.3 타입 단언](https://ahnheejong.gitbook.io/ts-for-jsdev/06-type-system-deepdive/type-assertion.md): 타입 단언을 통해 컴파일러에게 특정 타입 정보의 사용을 강제할 수 있다.
- [6.4 집합으로서의 타입](https://ahnheejong.gitbook.io/ts-for-jsdev/06-type-system-deepdive/types-as-sets.md): 프로그래밍의 타입이 수학의 집합과 공유하는 성질, 그리고 타입을 집합으로 바라보는 관점에 대해 배운다.
- [6.5 서로소 유니온 타입](https://ahnheejong.gitbook.io/ts-for-jsdev/06-type-system-deepdive/disjoint-union-type.md): 유니온 타입의 특수한 경우인 서로소 유니온 타입의 의미와 쓸모에 대해 다룬다.
- [6.6 맺으며](https://ahnheejong.gitbook.io/ts-for-jsdev/06-type-system-deepdive/outro.md)
- [들어가며 (7월 2일 공개)](https://ahnheejong.gitbook.io/ts-for-jsdev/07-advanced-types/intro.md): 7월 2일 공개 예정.
- [들어가며 (7월 16일 공개)](https://ahnheejong.gitbook.io/ts-for-jsdev/08-modules-and-namespaces/intro.md): 7월 16일 공개 예정.
- [들어가며 (7월 30일 공개)](https://ahnheejong.gitbook.io/ts-for-jsdev/09-real-world-projects/intro.md): 7월 30일 공개 예정.
- [들어가며 (8월 13일 공개)](https://ahnheejong.gitbook.io/ts-for-jsdev/10-libraries/intro.md): 8월 13일 공개 예정.
- [맺으며](https://ahnheejong.gitbook.io/ts-for-jsdev/10-libraries/outro.md)
- [ECMAScript 언어 표준과 TC39](https://ahnheejong.gitbook.io/ts-for-jsdev/appendix-ii-js-ecosystem/ecmascript-tc39.md)
- [TC39 프로세스](https://ahnheejong.gitbook.io/ts-for-jsdev/appendix-ii-js-ecosystem/tc39-process.md)
- [실제 예시 - Array.prototype.includes](https://ahnheejong.gitbook.io/ts-for-jsdev/appendix-ii-js-ecosystem/example-array.prototype.includes.md)
- [타입스크립트와 ECMAScript](https://ahnheejong.gitbook.io/ts-for-jsdev/appendix-ii-js-ecosystem/typescript-and-ecmascript.md)
