!!!!

  • 타입수준? 값수준? : 공용 어휘다.
    - 여기서는 타입 수준 코드를 '타입과 타입 연산을 포함하는 코드'를 의미한다.(유효한 자바스크립트 코드는 아니지만, 유효한 타입스크립트 코드)
    - 값 수준 코드는 그 밖의 모든 것을 가리킨다.(유효한 자바스크립트 코드)
  • 타입 어노테이션(type annotation)? : 어떤 변수 또는 값의 타입을 명시하는 방식.
  • 타입 별칭? : let, const, var로 변수를 선언해서 값 대신에 변수를 칭하듯이, 타입 별칭으로 타입을 가리킬 수 있다.
    	```
    type Age = number;
    type Person = {
    name: string;
    age: Age;
    } // 타입스크립트는 별칭을 추론하지 않기 때문에 반드시 별칭의 타입을 명시적으로 정의해야 한다.
    let age: Age = 55;
    let user: Person = {
    name: 'hong';
    age: age;
    }
    - 타입 별칭은 복잡한 타입을 DRY(don't repeat yourself=반복하지말라)하지 않도록 해준다. 변수가 어떤 목적으로 사용되었는지 쉽게 이해할 수 있도록 도와준다(사바사).
  • 유니온(union,합집합)과 인터섹션(intersection,교집합) : 실전에서는 유니온을 자주 사용한다.

ts함수 타입시그니처(=호출시그니처)

이 문법은 화살표 함수와 아주 비슷하다.

// 타입스크립트 표현
(a:number, b:number) => number
// 타입스크립트 활용 표현
type add = (a:number, b:number) => number

함수 호출 시그니처는 값이 아닌 타입 정보만 포함한다.(= 타입 수준 코드 정보만 포함한다.)
또한, 바디를 포함하지 않아 타입스크립트가 타입을 추론할 수 없기때문에 반환 타입을 명시해야 한다.

위의 단축형 호출 시그니처를 더욱 명확하게 표현할 수 있다.

//단축형 호출 시그니처
type add = (a:number, b?:number) => number

//전체 호출 시그니처
type add = {
	(a:number, b?:number):number
}

간단한 함수라면 단축형을 주로 사용,
복잡한 함수라면 전체 시그니처를 사용.

함수 시그니처 오버로딩(overloading)

오버로드 된 함수 : 호출 시그니처가 여러 개인 함수.

대부분의 프로그래밍 언어에서 여러 매개변수를 인수로 받아 어떤 타입의 값을 반환하는 함수를 선언한 다음, 이 함수가 요구하는 정확한 매개변수 집합을 건네 함수를 호출하면 항상 똑같은 타입의 반환값을 받게 된다. 타입스크립트는 이런 동적 특징을 오버로드된 함수 선언을 통해 제공하고, 입력 타입에 따라 달라지는 함수의 출력 타입은 정적 타입 시스템으로 각각 제공한다. 고급기능에 속한다!

type Vacation = {
	(from: Date, to: Date, destination: string): Holiday;
}

//type Vacation을 편도 여행과 왕복 여행을 지원하도록 코드를 수정했다.
type Vacation = {
	(from: Date, to: Date, destination: string): Holiday;
    (from: Date, destination: string): Holiday;
}

// vacation의 구현 코드다.
let vacation: Vacation = (from, to, destination) => { //... };

위의 코드는 에러를 발생시킨다. 왜일까?
-> 조합된 오버로드 시그니처가 존재하지 않기 때문이다.(자동으로 추론하지 않는다)
직접 선언해서 다시 코드를 바꿔보자.

// 편도 여행과 왕복 여행 지원한 코드다.
type Vacation = {
	(from: Date, to: Date, destination: string): Holiday;
    (from: Date, destination: string): Holiday;
} // - 1

// vacation의 구현 코드다.
let vacation: Vacation = (
	from: Date, 
    toOrDestination: Date | string, 
    destination?: string
) => { // - 2
    //... 
};
  • 1오버로드 된 함수 시그니처 두 개를 선언함.
  • 2vacation구현의 시그니처는, 두 개의 오버로드 시그니처를 수동으로 결합한 결과와 같다.
profile
어두운 밤하늘, 밝은 달빛.

0개의 댓글