Skip to content

Unexpected union type between generic and non-generic function #12970

Closed
@gcnew

Description

@gcnew

TypeScript Version: nightly (2.2.0)

Code

function id<T>(x: T): T {
    return x;
}

function stringId(x: string): string {
    return x;
}

function numberId(x: number): number {
    return x;
}

// OK: ((x: string) => string) | ((x: number) => number)
const f = true ? numberId : stringId;

// Actual: <T>(x: T) => T
// Expected: (x: string) => string
const g = true ? id : stringId;

Expected behavior:
Union between a function and a generic function should yield the most specific type, not the most general one.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Needs InvestigationThis issue needs a team member to investigate its status.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions