Skip to content

Suggestion: CFA, assignment, strict null checks and function scope #17449

Closed
@kitsonk

Description

@kitsonk

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'

Metadata

Metadata

Assignees

No one assigned

    Labels

    SuggestionAn idea for TypeScriptToo ComplexAn issue which adding support for may be too complex for the value it adds

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions