question-mark
Stuck on an issue?

Lightrun Answers was designed to reduce the constant googling that comes with debugging 3rd party libraries. It collects links to all the places you might be looking at while hunting down a tough bug.

And, if you’re still stuck at the end, we’re happy to hop on a call to see how we can help out.

Ability to patch/overwrite missing/wrong declarations

See original GitHub issue

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)

Issue Analytics

  • State:open
  • Created 5 years ago
  • Reactions:30
  • Comments:10 (3 by maintainers)

github_iconTop GitHub Comments

8reactions
zheeengcommented, Jul 9, 2018

Maybe we need a way to partially change declarations. Many patched declarations are not very correct.

3reactions
siriancommented, Oct 9, 2019

Any news? I also want to override incorrect declaration of document.open (lib.d.ts) Because this is wrong typing

open(url?: string, name?: string, features?: string, replace?: boolean): Document;

correct is:

open(url: string, name: string, features: string): Window;
open(type?: string, replace?: string): Document;

https://developer.mozilla.org/en-US/docs/Web/API/Document/open

Read more comments on GitHub >

github_iconTop Results From Across the Web

Unable to overwrite already existing file in SharePoint library ...
Solved: Hi Team, I have created a flow to copy files from on premise server(when file is created or modified in folder) using...
Read more >
7 Ways To Use The PATCH Function In Power Apps ...
A full tutorial on how to build a Power Apps patch form including the topics: form submissions, data validation, error-handling and updating a ......
Read more >
Error while applying a patch in git
Make sure the patch hasn't already been applied. Look for it in git-log or simply examine the code to see if the change(s)...
Read more >
SharePoint - How to Patch the 6 most complex data types
Note that the attribute values we specify here will not update the user or overwrite the values that are stored against the Office365...
Read more >
Solved: Re: Publish to Replace Report Does Not Overwrite E...
Once I publish a report with a Power BI Dataset model to the service (In this case to ... All messages/dialogs indicate the...
Read more >

github_iconTop Related Medium Post

No results found

github_iconTop Related StackOverflow Question

No results found

github_iconTroubleshoot Live Code

Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free

github_iconTop Related Reddit Thread

No results found

github_iconTop Related Hackernoon Post

No results found

github_iconTop Related Tweet

No results found

github_iconTop Related Dev.to Post

No results found

github_iconTop Related Hashnode Post

No results found