Microsoft/TypeScript

Only `null` and `undefined` included in later overloads during inference between overloads

Open

#47,586 opened on 2022幎1月25日

GitHub で芋る
 (2 comments) (2 reactions) (0 assignees)TypeScript (6,726 forks)batch import
Help WantedNeeds Investigation

Repository metrics

Stars
 (48,455 stars)
PR merge metrics
 (平均マヌゞ 6d 17h) (30d で 9 merged PRs)

説明

Bug Report

🔎 Search Terms

overload null undefined

🕗 Version & Regression Information

  • This is the behavior in every version I tried, and I wrote the FAQ

⏯ Playground Link

Playground link with relevant code

💻 Code

This is a bit over-reduced but it's still weird

declare function callIt<T>(func: {
    (): T;
    (): T;
}): T;

declare function overloaded(): string;
declare function overloaded(): number | null;

// m: string | null. Where'd number go?
const m = callIt(overloaded);

🙁 Actual behavior

m: string | null

🙂 Expected behavior

m: string | number | null

This feels intentional since it only null and undefined make it out of the second signature, but I can't find where we do this or what the motivation behind it is.

コントリビュヌタヌガむド