TypeScript 4.8 공식 출시

TypeScript 4.8이 공식 출시되었습니다.

베타 및 RC 릴리스 이후 변경 사항

베타 릴리스 이후  안정 버전은 이제 자동 가져오기에서 특정 파일 제외를 지원합니다 . 베타 발표에서는 타입 시그니처에서 사용하지 않는 비구조화 별칭에 대한 주요 변경 사항에 대해 언급하지 않았습니다. 또한 베타나 RC 릴리스 발표에서는 TypeScript 구문 트리 데코레이터의 API 주요 변경 사항에 대해 설명하지 않습니다. 이는 새 릴리스 발표에 자세히 설명되어 있습니다.

주요 변화


교차 유형 및 공용체 유형에 대한 유형 축소 개선 사항

TypeScript 4.8 버전은 주로 공용체 유형 및 교차 유형의 표현과 유형의 축소에서 더욱 향상된 기능을 제공합니다. --strictNullChecks 

예를 들어 TypeScript 유형 시스템의 최상위 유형으로 unknown 유형에는 다른 모든 유형이 포함됩니다.사실 unknown과 unknown의 효과는 동일합니다. 즉 null의 고유한 의미, 정의되지 않은 유형 및 모든 것의 기원 . {} | null | undefined  {}

템플릿 문자열 유형에서 추출 추론

버전 4.7에서 TypeScript는 추론 확장 구문을 지원하므로 조건문을 다시 판단할 필요 없이 예상 유형의 값을 한 단계로 직접 추론할 수 있습니다.

type FirstString<T> =
    T extends [infer S, ...unknown[]]
        ? S extends string ? S : never
        : never;
​
// 基于 infer extends
type FirstString<T> =
    T extends [infer S extends string, ...unknown[]]
        ? S
        : never;

버전 4.8은 이를 더욱 향상시켰습니다.추측이 기본 유형으로 제한될 때 이제 추론의 유형 정보를 리터럴 유형 수준으로 최대한 추론합니다.

// 此前为 number,现在为 '100'
type SomeNum = "100" extends `${infer U extends number}` ? U : never;
​
// 此前为 boolean,现在为 'true'
type SomeBool = "true" extends `${infer U extends boolean}` ? U : never;

동시에 TypeScript는 추출된 값을 원래 문자열로 다시 매핑할 수 있는지 여부를 확인합니다. 예를 들어 SomeNum 은 동일한지 여부 를 확인합니다 . 다음 예제에서는 숫자 형식으로만 추론할 수 없기 때문에 다시 매핑: String(Number("100"))  "100"

// String(Number("1.0")) → "1",≠ "1.0"
type JustNumber = "1.0" extends `${infer T extends number}` ? T : never; 

바운드 유형의 유형 추론

TypeScript의 일반 패딩은 다음 예제와 같이 호출자의 영향도 받습니다.

declare function chooseRandomly<T>(x: T,): T;
​
const res1 = chooseRandomly(["linbudu", 599, false]);

이 시점에서 res1의 유형과 함수의 일반 T는 로 추론 되지만 메서드를 변경하면 다음과 같이 됩니다. Array<string | number | boolean>

declare function chooseRandomly<T>(x: T,): T;
​
const [a, b, c] = chooseRandomly(["linbudu", 599, false]);

이때, a, b, c는 string, number, boolean 타입으로 추론되는데, 이는 함수의 제네릭 타입이 이러한 튜플 타입으로 채워진다는 것을 의미한다. [string, number, boolean] 

제네릭을 채우는 이 방법을 바인딩 패턴이라고 하며 버전 4.8에서는 제네릭에 대한 영향이 항상 정확하지 않기 때문에 바인딩 패턴을 기반으로 하는 형식 추론이 비활성화됩니다.

declare function f<T>(x?: T): T;
​
const [x, y, z] = f();

자세한 내용은 릴리스 발표를 참조하십시오 .

추천

출처www.oschina.net/news/208127/typescript-4-8-released