microsoft / microsoft/TypeScript
Ability to patch/overwrite missing/wrong declarations
Nobody has claimed this yet.
- Dominant language
- Go
- Stars
- 111k
- Forks
- 14.3k
- Avg merge
- 2d 4h
- Merged PRs (30d)
- 132
Description
Search Terms
correct wrong declaration, fix declaration, overwrite module declaration, fix module type
Suggestion
Sometimes we encounter an npm module with missing declarations and incorrect declarations in its types file. Wish we have this ability patch/correct its declaration for temporary using before PR a patch and have it's released.
Current behavior & Workaround
Consider this situation, module moduleWithIssues indeed exports itemExistedWithoutDeclaration but its declaration file doesn't contain it, and has a incorrect declaration itemWithWrongDeclaration
import {
foo, bar,
itemExistedWithoutDeclaration, // report 'itemExistedWithoutDeclaration' doesn't exist
itemWithWrongDeclaration
} from 'moduleWithIssues'
// 'itemWithWrongDeclaration' is number type but declared as string, TS report type error
console.log(Math.abs(itemWithWrongDeclaration))
At present, I found a workaround is adding a local module declaration for itemExistedWithoutDeclaration and assert itemWithWrongDeclaration as its correct declaration
import { foo, bar, itemExistedWithoutDeclaration, itemWithWrongDeclaration } from 'moduleWithIssues'
declare module 'moduleWithIssues' {
const itemExistedWithoutDeclaration: number
}
const itemCorrected: number = itemWithWrongDeclaration as any
It works in *.ts file but not in *.d.ts file. An idea patching solution should be re-declare some items of moduleWithIssues in a *.d.ts file in the project. like below:
// interfaceInProject.d.ts
declare module 'moduleWithIssues' {
const itemExistedWithoutDeclaration: number
const itemWithWrongDeclaration: number
}
unfortunately this patch module will shadow original module declaration of moduleWithIssues package.
import { foo, bar, itemExistedWithoutDeclaration, itemWithWrongDeclaration } from 'moduleWithIssues'
foo and bar are reported non-existent.
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. new expression-level syntax)
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with the moduleWithIssues examples in a .ts file and an interfaceInProject.d.ts file, comparing the current workaround with the shadowing behavior described. Investigate how module declarations are merged and determine whether missing and corrected exports can coexist with the package declaration. Done means the local declaration preserves foo and bar while adding or overriding the specified items.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- typescript
- Domain
- compilers
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 25/100