Skip to content

Using && with a string produces union type with empty string #32455

@lumaxis

Description

@lumaxis

The below code is a super simplified version of a real world scenario I just ran into. When trying to assign a value only if some other condition is true and otherwise returning undefined, TypeScript produces a strange union type that includes empty string ''.
The linked Playground contains a slightly larger example that gets closer to demonstrating my real world use case.

I would argue that in cases where the compiler can clearly know that something is truthy, it should evaluate to the type of the value on the right hand side of &&, even with strictNullChecks off.

TypeScript Version: 3.5.1 (With strictNullChecks off)

Search Terms: logical and empty string, string && empty

Code

const x = true && 'a'

Expected behavior:
Type of x is 'a'

Actual behavior:
Type of x is '' | 'a'

Playground Link:
https://www.typescriptlang.org/play/?strictNullChecks=false#code/C4TwDgpgBAysBOBLAdgcwKrMQe2VAvFAOQCGRUAPsQEZECwAUIwGYCuyAxsDnqhMHFbNmACgCUALlgIUGLLkpR2AEwjMUEZVADejKPqgdcAZ2BQANthKqthBKwgBuPQfj9W8PAFkSwABYAdPAkyMrYALbiUAD8FlY2UABkicRkUFIqahrKzgwAvkA

Related Issues:
Couldn't find any 🕵🏼‍♂️

Metadata

Metadata

Assignees

No one assigned

    Labels

    DuplicateAn existing issue was already created

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions