Closed
Description
Before You File a Proposal Please Confirm You Have Done The Following...
- I have searched for related issues and found none that match my proposal.
- I have searched the current rule list and found no rules that match my proposal.
- I have read the FAQ and my problem is not listed.
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
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