Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Rule proposal: Enforce related types for getter and setter pairs #7236

Closed
@JoshuaKGoldberg

Description

@JoshuaKGoldberg

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

TypeScript 5.1 allowed getter and setter accessor pairs to specify two different types. While this may be a necessary change to represent JS APIs that use unrelated types (see the release notes), it feels like a confusing thing to do in code. I think it'd make sense to have a lint rule that enforces a getter's type at least be a subtype of its setter's type - as TypeScript used to enforce.

Fail Cases

interface Example {
  get value(): string;
  set value(input: string | undefined);
}

Pass Cases

interface Example {
  get value(): string;
  set value(input: string);
}

Additional Info

It might be useful to have an option to enforce whether the types must be the exact same. E.g. the super-type being a number | string while the sub-type is string.

Blocked on my favorite TypeScript issue, microsoft/TypeScript#9879: adding a Type Relationship API. Filing this for tracking and because I enjoy passive-aggressively bugging the TypeScript team for features. ❤️

Metadata

Metadata

Assignees

No one assigned

    Labels

    accepting prsGo ahead, send a pull request that resolves this issueenhancement: new plugin ruleNew rule request for eslint-pluginlocked due to agePlease open a new issue if you'd like to say more. See https://typescript-eslint.io/contributing.package: 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