Skip to content

Discriminated Union only auto resolve when it's basic props, not within callback #42023

Closed
@alexis-regnaud

Description

@alexis-regnaud

TypeScript Version: 4.1.2

Search Terms:
interdependent props, Union changed for an Intersection, Discriminated Union

Code

// A *self-contained* demonstration of the problem follows...
// Test this by running `tsc` on the command-line, rather than through another build tool such as Gulp, Webpack, etc.

Expected behavior:
Since I use Discriminated Union I would like to have a Union within the callback as well.

Actual behavior:
Within the callback, I have an intersection instead of Union. But that work well with basic param (Exemple selected in the Playgound)

Playground Link:
Playground

Related Issues:
#40647, #12184

Seems like it's issue that has brought a bunch of times, but I'm wondering why we still need to do the

function isCase1(props: AllProps): props is Case1 {
  return !!props.aParamOfCase1;
}

Only for the callback function

Activity

RyanCavanaugh

RyanCavanaugh commented on Dec 23, 2020

@RyanCavanaugh
Member

This is a correct error; if this were allowed it'd be straightforward to inhabit an Option[] with an Option, which is unsound

alexis-regnaud

alexis-regnaud commented on Dec 23, 2020

@alexis-regnaud
Author

It's a SimpleSelected | MultipleSelected so a Option | Option[] then newOption which is of type Option should be accepted. I'm kind of confused...

RyanCavanaugh

RyanCavanaugh commented on Dec 23, 2020

@RyanCavanaugh
Member
// This call is legal, but crashes
aFunction({
  selected: [], onChange: (a: Option[]) => {
    console.log(a.indexOf(a[0]));
  }
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Working as IntendedThe behavior described is the intended behavior; this is not a bug

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Development

      No branches or pull requests

        Participants

        @RyanCavanaugh@alexis-regnaud

        Issue actions

          Discriminated Union only auto resolve when it's basic props, not within callback · Issue #42023 · microsoft/TypeScript