-
Notifications
You must be signed in to change notification settings - Fork 13.1k
Description
Search Terms
- backticks
- module declaration
- NoSubstitutionTemplateLiteral
- template string
Other related issues/PRs:
- Backtick literals in enumerations #30962 and the fix, Add support for template literals in enums #31042
- Treat NoSubstitutionTemplateLiteral same as a StringLiteral in import statement #29318,
- Permit using template strings for string literal types #29331
- Better support for NoSubstitutionTemplateLiteral in checker #31548, which generalizes some things about template literals, but explicitly doesn't address module declarations because of the way they're handled internally
Suggestion
It'd be nice for backticks to be allowed in module declarations. For example:
declare module `semver` {}This causes an error with typescript 3.5.1: Cannot invoke an expression whose type lacks a call signature. Type 'NodeModule' has no compatible call signatures.ts(2349)
Use Cases
I'd like to be able to use backticks more consistently in my code.
Similar to #30962:
This is especially important because the backticks mode of the quotes rule from ESLint breaks programs (cf yarnpkg/berry#70 for an example). While it could be seen as an ESLint bug, I think it should be possible for TS to use raw template string interchangeably with regular strings as long as they don't contain variables.
Examples
This would be allowed
declare module `semver` {}and would be equivalent to
declare module 'semver' {}Checklist
My suggestion meets these guidelines:
- This wouldn't be a breaking change in existing TypeScript/JavaScript code
- This wouldn't change the runtime behavior of existing JavaScript code
- This could be implemented without emitting different JS based on the types of the expressions
- This isn't a runtime feature (e.g. library functionality, non-ECMAScript syntax with JavaScript output, etc.)
- This feature would agree with the rest of TypeScript's Design Goals.