TypeScript Version: 2.4.2
Code
// @strictNullChecks: trueletfoo: {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'
TypeScript Version: 2.4.2
Code
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 thereforefoowill 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'