Skip to content

Rule proposal: restrict-constructor-expressions #10895

Open
@karlhorky

Description

@karlhorky

Before You File a Proposal Please Confirm You Have Done The Following...

My proposal is suitable for this project

  • My proposal specifically checks TypeScript syntax, or it proposes a check that requires type information to be accurate.
  • My proposal is not a "formatting rule"; meaning it does not just enforce how code is formatted (whitespace, brace placement, etc).
  • I believe my proposal would be useful to the broader TypeScript community (meaning it is not a niche proposal).

Description

Similar to restrict-template-expressions, the new rule restrict-constructor-expressions restrict the types of expressions passed to constructors such as Number() and String() to a subset which result in non-surprising return values

TypeScript types for constructors have a permissive any type for the parameters:

TypeScript playground showing that the Number constructor has a parameter type of 'any'
TypeScript playground showing that the String constructor has a parameter type of 'any'

Fail Cases

Number({stdout: '123'}) // NaN
Number(['2']) // 2
String({result: 123}) // '[object Object]'

// I'm guessing there are many more...

Pass Cases

Number({stdout: '123'}.stdout) // 123
Number(['2'][0]) // 2
String({result: 123}.result) // '123'

Additional Info

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancement: new plugin ruleNew rule request for eslint-pluginevaluating community engagementwe're looking for community engagement on this issue to show that this problem is widely importantpackage: eslint-pluginIssues related to @typescript-eslint/eslint-plugin

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions