fetch 함수의 타입 선언을 타고 가다보면 Request의 타입과 값이 분리되어 모델링 되어있는 것을 볼 수 있다.(자세한 것은 아이템 8에서 다룰 예정)
타입이란? 결국 값들의 집합을 의미한다.
변수 value에 들어올 수 있는 값들의 집합('a', 'b', 'c')이 곧 타입임
타입은 집합이다
가장 작은 집합: 공집합(never)
never 다음으로 작은 집합: 유닛(unit) => 'a'
유닛을 여러개 묶으면: 유니온(union) => 'a' | 'b'
타입체커가 하는 일은 어떤 집합이 다른 집합의 부분집합인지 확인하는 것이다.
일반적인 구조적 할당 가능성 체크와 잉여 속성 체크를 구분해서 이해해야 한다.
interface a {
name: string;
age: number;
password: "a";
}
interface b {
name: string;
password: string;
}
// intersection
type c = a & b;
type c_key = keyof (a & b);
type c_key2 = keyof a | keyof b;
// 속성은 합집합이 되고, 타입은 교집합이 된다.
// 구조적 타이핑이 적용되어 아래의 'another'와 같은 별개의 속성이 추가될 수 있다
// 타입 c는 a와 b의 교집합에 위치할 수 있는 타입이어야 함
const obj_c: c = {
name: "jueun", // string & string
age: 29, // number
password: "a", // 'a' & string
another: "", // 여기서 ts가 내는 오류는 '잉여속성체크'로, 할당이 불가능함을 의미하는 것은 아님 => 엄격한 리터럴 체크
};
const temp_obj_c: c = obj_c;
// 오류 메세지 없이 할당됩니다.
// 임시변수를 도입하면 잉여 속성 체크를 건너뛸 수 있다
fetch 함수의 타입 선언을 타고 가다보면 Request의 타입과 값이 분리되어 모델링 되어있는 것을 볼 수 있다.(자세한 것은 아이템 8에서 다룰 예정)
타입이란? 결국 값들의 집합을 의미한다.
value
에 들어올 수 있는 값들의 집합('a', 'b', 'c')이 곧 타입임타입은 집합이다
가장 작은 집합: 공집합(never)
never 다음으로 작은 집합: 유닛(unit) => 'a'
유닛을 여러개 묶으면: 유니온(union) => 'a' | 'b'
타입체커가 하는 일은 어떤 집합이 다른 집합의 부분집합인지 확인하는 것이다.
일반적인 구조적 할당 가능성 체크와 잉여 속성 체크를 구분해서 이해해야 한다.