Ability to patch/overwrite missing/wrong declarations
See original GitHub issueSearch 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)
Issue Analytics
- State:
- Created 5 years ago
- Reactions:30
- Comments:10 (3 by maintainers)
Top GitHub Comments
Maybe we need a way to partially change declarations. Many patched declarations are not very correct.
Any news? I also want to override incorrect declaration of document.open (lib.d.ts) Because this is wrong typing
correct is:
https://developer.mozilla.org/en-US/docs/Web/API/Document/open