Suggestion: CFA, assignment, strict null checks and function scope · Issue #17449 · microsoft/TypeScript (original) (raw)

TypeScript Version: 2.4.2

Code

// @strictNullChecks: true let foo: { foo: string; } | undefined;

foo = { foo: 'bar' }; document.addEventListener('click', () => { foo.foo; // Object is possibly 'undefined' });

foo.foo;

Currently, TypeScript resets the type of variables within a function scope, giving the error that the variable is possibly undefined, but it can be statically determined that after the function, the outer scope does no re-assignment. So it is possible to determine that there is no re-assignment and therefore foo will always be assigned.

Related to #9998 (trade-offs in CFA)
Related to #11498 (annotate immediately invoked callbacks)

Expected behavior:

No errors.

Actual behavior:

Object is possibly 'undefined'