TypeScript3.4RC의 변경 사항 요약

12034 단어 TypeScript
오늘 TypeScript 3.4RC를 방송했습니다.
Announcing TypeScript 3.4 RC

총결산

  • 구축 시간 단축을 위해 incremental 로고 추가
  • Readonly 주변 개선 사항
  • readonly 수식자로 간단하게 Readonly Array형
  • 을 나타낼 수 있다
  • readonly 메타그룹 추가
  • readonly 수식자가 있는 맵 형식의 자동 변환 기능 추가
  • const assertion 문법 추가
  • globalThis 유형 검사 추가
  • namedparameters로 전환하는 재구성 기능 추가
  • 파괴적 변경
  • 최고급this 유형이any에서 글로벌This
  • 로 변경
  • 함수의 형 추리 개선의 영향
  • -- 내부 플래그


    - watch 모드에서 마지막 컴파일의 상태에 따라 영향 범위의 유형만 검사합니다.
    v3.4에 --incremental 로고를 추가합니다. --watch 모드의 정상적인 컴파일이 아니더라도
    마지막 컴파일의 상태를 저장하면 구축 시간을 단축할 수 있습니다.
    기본적으로 이전 상태는 ./lib/.tsbuildinfo 로 저장됩니다.(--tsBuildInfoFile에서도 변경할 수 있음)

    Readonly 주변 개선 사항


    ReadonlyArray형 단순화 표현


    통상적인 배열은 number[]Array<number> 등 두 가지 표기 방법이 있다.
    Readonly Array 유형에 관하여 Readonly<number> 및 일반적인 표기만 사용
    v3.4부터readonly number[]는 일반적인 배열과 같은 짧은 손 표시가 가능하다.

    readonly 메타그룹


    상기와 같은 문법은 v3.4에서 다시 대입할 수 없는 원조의 유형을 나타낼 수 있다.
    const readonlyTuple: readonly [string, number] = ['hoge', 1]
    // error
    readonlyTuple[0] = 'fuga'
    

    readonly 수식자가 있는 맵 형식을 자동으로 변환합니다


    appedTypes에 readonly 수식자를 부여하는 이념에서
    수조나 모듈을object 형식이 아닌 일반 모델로 정의할 때의 행동이 v3.4에서 변경되었습니다.
    위의 두 가지 유형으로 자동 변환될 것 같습니다.
    // lib.d.ts
    type Readonly<T> = {
        readonly [K in keyof T]: T[K]
    }
    
    // before v3.4
    // type B is number[]
    type B = Readonly<number[]>
    
    // type C is [string, boolean]
    type C = Readonly<[string, boolean]>
    
    // v3.4
    // type B is readonly number[] (ReadonlyArray<number>)
    type B = Readonly<number[]>
    
    // type C is readonly [string, boolean]
    type C = Readonly<[string, boolean]>c
    
    반면,readonly 맵 형식 제거
    다음 자동 변환이 작용합니다.
    // lib.d.ts
    type Writable<T> = {
        -readonly [K in keyof T]: T[K]
    }
    
    // number[]
    type B = Writable<readonly number[]>;
    
    // [string, boolean]
    type C = Writable<readonly [string, boolean]>;
    

    const 단언


    v3.4에서 ~ as const 까지의 문법이 추가되었습니다.
    우선, 다음 상황
    "Hello"라는 글자 자체가 "Hello"형입니다.
    let에서 성명한 것이기 때문에string형으로 추론하여 다시 대입할 수 있도록 합니다.
    // Type string
    let x = 'hello'
    x = 'world'
    
    다음은 const 단언을 사용할 때
    상술한 바와 달리, 추론은string형이 아닌'hello'형이다
  • 수조 문자->readonly 원조
  • readonly 속성이 있는 대상
  • 에서 설명한 대로 해당 매개변수의 값을 수정합니다.
    // Type 'hello'
    let x = 'hello' as const
    
    // Type 'readonly [10, 20]'
    let y = [10, 20] as const
    
    // Type '{ readonly text: "hello" }'
    let z = { text: "hello" } as const
    
    ※ *.tsx 이외의 파일에서도 let x = <const>'hello' 이러한 문법을 사용할 수 있다
    또한 const 단언은 문자에만 사용할 수 있는 것 같습니다.
    // error
    let a = (Math.random() < 0.5 ? 0 : 1) as const
    

    globalThis 지원


    ECMAScript 비율 정보globalThis(2019/3/16 현재 Stage3)
    v3.4에서 형식 검사 지원을 추가했습니다.
    // in a global file
    const hoge = 'hoge'
    
    // error
    globalThis.hoge = 'fuga'
    
    하지만 TypeScript는 globalThis를 변환하지 않기 때문에
    지원하지 않는 브라우저에서 이동하려면polyfill을 넣어야 합니다.

    이름 매개 변수 재구성 기능


    함수의 매개 변수가 추가되었고namedparameter로 변환할 때의 재구성 기능이 추가되었습니다.
    아래gif를 보시면 알 수 있습니다.
    ※ 이미지 대여방송 페이지

    파괴적 변경


    다음 두 가지를 방송했습니다.
    이전에는 번역을 통과했지만, 단지 번역 오류가 있을 뿐이다
    컴파일된 코드는 바뀌지 않을 것 같습니다.

    최고급this 유형


    최고급this 타입은any타입입니다.
    v3.4에서 globalThis형으로.
    이전에 컴파일된 다음 코드
    v3.4에서 noImplicitAny 옵션이 활성화된 경우
    globalThis 형식에 정의되지 않은 hoge 속성이 은식any 형식으로 오류가 발생합니다.
    this.hoge = 'hoge'
    

    함수 유형 추리 개선의 영향


    함수의 유형 추리가 개선되었는데, 번역 오류가 있었다고 한다.
    예를 들어 다음 코드의 경우
    x.value는 이전에 {}[]형으로 추정되었습니다.
    v3.4에서 number[]형으로 추정된다.
    따라서 x.value에서pushnumber형 이외의 코드는 형 오류가 될 수 있습니다.
    declare function compose<T, U, V>(f: (arg: T) => U, g: (arg: U) => V): (arg: T) => V;
    
    function list<T>(x: T) { return [x]; }
    function box<T>(value: T) { return { value }; }
    
    let f = compose(list, box);
    let x = f(100)
    

    좋은 웹페이지 즐겨찾기