타입스크립트
목표
유효한 프로그램은 통과시키고 무효한 프로그램에는 오류를 발생시키는 것
타입스크립트는 ‘Compiled Language' 이다.
전통적인 Compiled Language 와는 다른 점이 많다.
그래서 ‘Transpile’ 이라는 용어를 사용하기도 한다.
자바스크립트는 ‘Interpreted Language’ 이다.
컴파일이 필요 O
컴파일이 필요 X
컴파일러가 필요 O
컴파일러가 필요 X
컴파일 하는 시점 O → 컴파일 타임
컴파일하는 시점 X
컴파일된 결과물을 실행
코드 자체를 실행
컴파일된 결과물을 실행하는 시점
코드를 실행하는 시점 O → 런타임
강의 요약
ts-node
TypeScript 코드를 JavaScript로 컴파일하지 않고 직접 실행시키는 라이브러리
Typescript REPL
타입의 재사용
blah blah
타입 추론
모든 타입을 선언을 해줘야 할까? 선언이 꼭 필요한 상황과 아닌 상황을 생각해보자.
키워드 정리
REPL (Read-Eval-Print-Loop)
입력한 소스코드를 읽고(Read) 평가(Eval)하고 결과를 출력(Print)하는 과정을 반복(Loop)
REPL 개발 도구
브라우저 개발 도구
터미널/쉘
온라인 컴파일러(예시: Repl.it, jsfiddle.net, jsbin.com)
온라인 정규식 유효성 검사기
Interface vs Type
Type Alias 정의
어떠한 것을 구현할 목적이 아닌 데이터를 담을 목적으로 만들때
Type
사용
Interface 정의
어떤 특정한 규격을 정의하거나 이 규격을 통해서 어떤 것이 구현된다면
Interface
를 사용
공통점
몇가지 기능을 제외하고 타입 별칭과 인터페이스 모두 동일하게 타입을 지정할 수 있다.
Type Alias로 상속을 구현할 때 주의점
Type Alias 내에 union이 사용된 경우 사용 X -> 정적으로 모양을 알수있는 객체 타입만 동작
차이점
Type Alias와 Interface 각각 개별적으로 가지고 있는 기능 및 특징들
선언 병합(Declaration Merging): Interface는 같은 이름으로 여러번 선언해도 컴파일 시점에서 하나로 합쳐진다
Public API에서 사용되는 타입은 항상 Inteface로 작성되어져야 하는 이유이기도 하다.
연산 프로퍼티(Computed Property): 대괄호([])안에 표현식(expression)을 이용해 객체의 key값을 정의하는 문법
더 활용성이 높은 타입을 선언해서 사용 가능하고 타입의 재사용성이 높아짐!
Index Type
이라고 불린다.
타입 추론
blah blah
Union Type vs Intersection Type
유니온 타입(Union Type): OR
발생할 수 있는 모든 케이스 중 하나만 할당할 때 사용
태그된 유니온(tagged Union)
Descriminated Union이라고도 불리며 공통된 속성을 이용하여 구분하기 쉽게 직관적인 코드를 작성할 수 있다.
공통된 속성을 갖는 타입들을 구분하기 위해 쓰이는
type
을 태그(tag) 또는 식별자(descriminator)라고 부른다.
타입 가드(Type Guard)
태그된 유니온을 활용한 타입 식별 헬퍼 함수 반환 타입의
is
구문은 함수의 반환이 true인 경우, 타입 체커에게 매개변수 타입을 좁힐 수 있다고 알려준다.
인터섹션 타입(Intersection Type): AND
다양한 타입을 하나로 묶어서 사용할 수 있다.
Optional Parameter
값이 있을수도 없을수도 있는 타입, 앞에
?
를 붙여 선언한다. Default 값을 설정해도 Optional Parameter가 된다.
타입을 집합이라 생각하기
타입을 할당가능한 값들의 집합(범위) 이라 생각하자.
타입이 값의 집합이라는 건 동일한 값의 집합을 가지는 두 타입은 같다는 의미
가장 작은 집합은 아무 값도 포함하지 않은 공집합이며 아무것도 할당 할 수 없는
never
타입이다.그 다음으로 작은 집합은 한가지 값만 포함하는 리터럴 타입
할당가능한 값들의 집합을 여러개로 묶는 경우 값 집합들의 합집합인 유니온 타입을 사용
구조적 타이핑 & 덕 타이핑
타입은 '봉인'되어 있지 않다.
자바스크립트는 본질적으로 덕 타이핑(duck typing) 기반
타입스크립트의 타입 시스템은 이러한 자바스크립트 런타임 동작을 모델링하기 위해 구조적 타이핑을 사용
& 인터섹션
& 연산자는 두 타입의 교집합을 계산한다.
인터섹션 타입의 값은 각 타입 내의 속성을 모두 포함하는 것이 일반적인 규칙이다.
두 인터페이스가 겹쳐지는 부분이 없어서 공집합이라고 예상하기 쉽다.
하지만 타입스크립트의 구조적 타이핑으로 추가적인 속성을 가지는 타입도 여전히 그 타입이라는 점을 생각해본다면
A & B
는 두 타입을 모두 갖는 타입이 된다.
잉여속성 체크
객체 리터럴에 알 수 없는 속성을 허용하지 않는것, 그래서 ‘엄격한 객체 리터럴 체크' 라고도 불린다.
타입이 명시된 변수에 객체 리터럴을 할당 할 때 타입스크립트는 해당 타입의 속성이 있는지, 그리고 그 외의 속성은 없는지 확인한다.
객체 리터럴은 추가적인 속성을 허용하는 구조적 타이핑의 한가지 예외라고 생각하자
언제 잉여 속성체크가 수행되는가?
객체 리터럴을 변수에 할당할 때
객체 리터럴을 함수에 매개변수로 전달할 때
오직 객체 리터럴에만 적용된다.
객체 리터럴일 때만 이런 식의 타입 검사가 수행되는 이유
속성이 추가로 입력되었지만 그 속성이 "실제로 사용되지 않는다면" 거의 항상 오타가 발생한 경우이거나 API를 잘못 이해한 경우이기 때문입니다.
unknwon vs never
Last updated