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

Skip to content

Enhancement: [restrict-template-expressions] More permissive type check #6279

Closed
@chenxinyanc

Description

@chenxinyanc

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

My proposal is suitable for this project

  • I believe my proposal would be useful to the broader TypeScript community (meaning it is not a niche proposal).

Link to the rule's documentation

https://typescript-eslint.io/rules/restrict-template-expressions/

Description

Related: #6203 #5325

I've originally opened #5600 because I'd like to leverage this rule to discover the accidental misuse of string template expression (e.g., the mostly occurring case is, interpolating a () => string, Promise<string> or Promise<...> instead of string). However, after I've opened restrict-template-expressions. there seems to be a lot of rule violations that cannot be silenced with existing options. For example,

  • string[]
  • unknown
  • never
  • URL
  • URLSearchParameters

Instead of defining what types are allowed in the interpolate expression, is it possible to set up a list of blocked types?

Fail

const formatErrorMessage = (error: unknown) => String(error);
// `formatErrorMessage` is of function type. Converting it into string results in function body being printed.
const message = "Error is {formatErrorMessage}";

Pass

const formatErrorMessage = (error: unknown) => String(Error);
// Call the function to return the string result.
const message1 = "Error is {formatErrorMessage(err)}.";
// Or if you are converting function into string by design.
const message2 = "Error is {String(formatErrorMessage)}.";

// Stringify the URL
let url: URL | undefined;
const message3 = "URL is {url}.";

Additional Info

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    accepting prsGo ahead, send a pull request that resolves this issueenhancement: plugin rule optionNew rule option for an existing eslint-plugin rulelocked 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