Skip to content

Breaking Programming TypeScript

kskim7714 edited this page Apr 23, 2021 · 3 revisions

Programming TypeScript: Making your applications scale

6장 고급 타입

6.1.4 타입 넓히기 (Type Widening)

  • 타입 추론 개념을 이해하려면 꼭 숙지.
  • 타입을 (정밀이 아닌) 일반적으로 추론 함.
  • let/var은 리터럴 값리터럴이 속한 기본 타입으로 넓혀짐.
let a = 'x' // string
const d = { x: 3 } // {x: numbr}
enum E {X, Y, Z}
let e = E.X // E
  • const로 할때 타입이 어떻게 될까?
const a = 'x'    // 'x'

enum E {X, Y, Z}
const e = E.X    // E.X
  • 타입을 명시하면 타입이 넓어지지 않음.
let a: 'x' = 'x'         // 'x'
const d: {x: 3} = {x: 3} // {x: 3}
  • 타입 선언 없이 할당, const에 할당 후에 let/var로 재할당하면 타입이 넓어짐.
const a = 'x'  // 'x'
let b = a      // string
  • 타입 선언 포함 할당, const에 할당 후에도 let/var로 해도 타입이 넓어지지 않음.
const c:'x' = 'x' // 'x'
let d = c         // 'x'
  • null/undefined로 초기화하면 any 타입으로 넓어짐.
let a = null  // any
a = 3         // any
a = 'b'       // any
  • null/undefined로 초기화된 변수가 선언 범위를 벗어나면 좁은 타입으로 변환됨.
function x() {
  let a = null   // any
  a = 3          // any
  a = 'b'        // any
  return a
}
// client calls
x()              // string

const 타입

초과 프로퍼티 타입

6.1.5 정제

차별화된 유니온 타입

6.1.6 종합성 (totality 또는 철저 검사 exhaustiveness checking)

6.3 고급 객체 타입

6.3.1 객체 타입의 타입 연산자 (&, |)

키인 (key in) 연산자: JSON 일부분을 타입으로 할당

keyof 연산자: 모든 키를 배열로 얻기

6.3.2 Record 타입

6.3.3 매핑된 타입

내장 매핑된 타입

6.3.4 컴패니언 객체 패턴

6.4 고급 함수 타입들

6.4.1 튜플의 타입 추론 개선

6.4.2 사용자 정의 타입 안전 장치

6.5 조건부 타입

6.5.1 분배적 조건부

6.5.2 infer 키워드

6.5.3 내장 조건부 타입들

6.6 탈출구