Skip to content

Improved NumberConstructor for literal types #62308

@MarcellPerger1

Description

@MarcellPerger1

⚙ Compilation target

esnext

⚙ Library

esnext

Missing / Incorrect Definition

NumberConstructor(value?: any): number:

TypeScript/src/lib/es5.d.ts

Lines 570 to 572 in 261630d

interface NumberConstructor {
new (value?: any): Number;
(value?: any): number;

This is correct but I think could be improved to work better when converting string literals to numbers by returning number literals. This could be achieved by doing something like

<T>(value?: T): T extends `${infer N extends number}` ? N : number;

See this playground link

Sample Code

const A = "12";
const B: 12 = Number(A);  // Type 'number' is not assignable to type '12'.

const A2: "12" | "13" | "14" = "12";
const B2: 12 | 13 | 14 = Number(A2);  // Type 'number' is not assignable to type '12 | 13 | 14'.

Documentation Link

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/Number

Metadata

Metadata

Assignees

No one assigned

    Labels

    Awaiting More FeedbackThis means we'd like to hear from more people who would be helped by this featureSuggestionAn idea for TypeScript

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions