Search

3주차

14장 타입 연산과 제네릭 사용으로 반복 줄이기

keyof, typeof, 인덱싱, 매핑된 타입등 도구 사용하기
Pick, Partial, ReturnType 같은 제네릭 타입에 익숙해지기
Partial<T>
ReadOnly<T>
Record<K,T>
Pick<T,>
Omit<T,K> : 프로퍼티 중 K 제거
type T = Omit<{a: ‘a’, b: ‘b’}, ‘b’>
Exclude<T,U> : 속성 중 U 제거
type T = Exclude<’a’ | ‘b’ | ‘c’, ‘b’> // ‘a’ | ‘c’
Extract<T,U>
NonNullable<T>
null과 undefined를 제외한 타입
Parameters<T>
매개변수 타입들의 튜플 타입 구성
declare f({a: string, b: number}): void
type T = Parameters<typeof f>; // [{a: string, b: number}]
ConstructorParameters<T>
생성자 함수의 매개변수 타입 추출
type T = ConstructorParameters<ErrorConstructor>; // [(string | undefined)?]
type T = ConstructorParameters<FunctionConstructor>; // string[]
type T = ConstructorParameters<RegExpConstructor>; // [string, (string | undefined)?]
ReturnType<T>
T의 반환타입
InstanceType<T>
생성자 타입 T의 인스턴스 타입
class C = {a = 1} ; InstanceType<typeof C>;
Required<T>

15장 동작 데이터에 인덱스 시그니처 사용하기

가능하다면 인터페이스, Record 보단 정확한 타입을 사용하기

16장 number 인덱스 시그니처보다는 Array, 튜플, ArrayLike 사용하기

number 인덱스를 속성 이름으로 사용지말고, Array, 튜플 등 사용하기

17장 변경 관련된 오류 방지를 위해 readonly 사용하기

변경하지 않는 경우 readonly 사용 권장
얕게 동작한다는 것 명시

18장 매핑된 타입을 사용하여 값을 동기화하기

매핑된 타입을 사용해서 값과 타입 동기화
새로운 속성 추가 시 선택을 강제하도록 매핑된 타입 사용

19장 추론 가능한 타입을 사용해 장황한 코드 방지하기

타입이 추론되는 경우 타입 구문 장석하지 않기
단 객체 리터럴과 함수 반환에는 명시하는 것이 좋음

20장 다른 타입에는 다른 변수 사용하기

변수는 선언 후 타입이 바뀌지 않도록 하기

21장 타입 넓히기

타입 넓히기를 통해 상수의 타입 추론법 이깋기
타입 넓히기란? : 지정된 단일 값을 가지고 타입 추론하기
function getComponent(vec: {x: number, y: number, z: number}, x: keyof Vectors){ ...} let x = 'x'; let vec = {x: 10, y: 20, z: 30}; getComponent(vec, x); // 에러 발생 // x는 할당 시점에 넓히기가 동작해 string으로 추론됨
JavaScript
복사
const, as const, 타입구문을 사용해 타입 강제 활용

22장 타입 좁히기

분기문 사용
조건문을 통해 null을 배제해 타입 좁히기 if(a)
instanceof를 통해 좁히기 if(search instanceof RegExp)
속성 타입을 통해 좁히기 if(’a’ in ab)
단 typeof el === ‘object’ 인 경우처럼 null도 object로 나오므로 오류 조심하기
명시적 태그 사용
타입을 식별하기 위해 커스텀 함수 도입하기
{ type: ‘download’, … }와 같이 명시적으로 태그 붙이기

23장 한꺼번에 객체 생성하기

속성을 하나씩 추가하지말고 한번에 만들기
… 이용하기