Skip to content

Control Flow Analysis for Dependent Parameters doesn't work when the parameters are generic #48345

@DetachHead

Description

@DetachHead

Bug Report

🔎 Search Terms

Control Flow Analysis for Dependent Parameters generic

🕗 Version & Regression Information

v4.7.0-dev.20220302

⏯ Playground Link

Playground link with relevant code

💻 Code

type Func = <T extends ["a", number] | ["b", string]>(...args: T) => void;

const f1: Func = (kind, payload) => {
    if (kind === "a") {
        payload.toFixed();  // error
    }
    if (kind === "b") {
        payload.toUpperCase();  // error
    }
};

🙁 Actual behavior

parameter type not narrowed

🙂 Expected behavior

parameter type is narrowed, like in the example from the typescript 4.6 blog post

type Func = (...args: ["a", number] | ["b", string]) => void;

const f1: Func = (kind, payload) => {
    if (kind === "a") {
        payload.toFixed();  // 'payload' narrowed to 'number'
    }
    if (kind === "b") {
        payload.toUpperCase();  // 'payload' narrowed to 'string'
    }
};

f1("a", 42);
f1("b", "hello");

Metadata

Metadata

Assignees

Labels

BugA bug in TypeScriptFix AvailableA PR has been opened for this issue

Type

No type
No fields configured for issues without a type.

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions