TypeScript icon indicating copy to clipboard operation
TypeScript copied to clipboard

Bloomberg TS5.5-beta feedback

Open murtyjones opened this issue 1 year ago • 1 comments

Acknowledgement

  • [X] I acknowledge that issues using this template may be closed without further explanation at the maintainer's discretion.

Comment

We are in the process of evaluating the impact of TS 5.5 beta on Bloomberg code. Below are preliminary findings.

Overall this looks to be a low-impact release. The following changes were observed and seem to either be benign in nature or else improvements:

Change Impacts Release notes Packages affected
Stricter type-checking of partial objects Type checker This may be caused by improved type predicates 1
Improved narrowing of Array.isArray result Type checker This may be caused by improved type predicates 1
Exports are hoisted to the top of a module Emitted JS Not announced Most

Stricter type-checking of partial objects

We observed one project with a new type error in 5.5-beta, seemingly due to an improvement in type-checking for partials.

A minimal reproduction is here.

Improved narrowing of Array.isArray result

We observed for one project a new type error from trying to compare a string with an array after an Array.isArray check. The generics involved make a minimal reproduction infeasible but the essence of the code is:

if (Array.isArray(foo)) {
     If (foo !== "something") // raises a new error for some complex foo
}

Exports are hoisted to the top of a module

Module exports seem to be hoisted to the top of modules now. No runtime impact observed.

Object.defineProperty(exports, "__esModule", { value: true });
+exports.foo = foo;
 function foo() {
     // …
 }
-exports.foo = foo;

murtyjones avatar May 13 '24 19:05 murtyjones

Stricter type-checking of partial objects

My educated guess is that the observed change was caused by the work done in https://github.com/microsoft/TypeScript/pull/57946 and https://github.com/microsoft/TypeScript/pull/57549

Improved narrowing of Array.isArray result

I don't think type predicate inference could change this anyhow. That change focuses on inferring some functions as type predicates. Array.isArray was already a type predicate - it's declaration is defined in a lib file.

Andarist avatar May 13 '24 22:05 Andarist