microsoft / microsoft/TypeScript
Ability to patch/overwrite missing/wrong declarations
まだ誰も着手していません。
- 主要言語
- Go
- スター
- 111k
- フォーク
- 14.4k
- 平均マージ
- 1日 19時間
- マージ済み PR(30日)
- 117
説明
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 を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
調査の方向性
.tsファイルとinterfaceInProject.d.tsファイルにあるmoduleWithIssuesの例から始め、現在の回避策と説明されているshadowingの動作を比較します。モジュール宣言がどのようにマージされるかを調査し、不足しているexportと修正されたexportがパッケージ宣言と共存できるかを確認します。ローカル宣言がfooとbarを保持しながら、指定された項目を追加または上書きできれば完了です。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- typescript
- 領域
- compilers
- issue の種類
- 機能追加
- 難易度
- 5/5
- 見積もり時間
- 1週間以上
- 活発さ
- 停滞
- 明瞭さ
- おおむね明確
- 初心者へのやさしさ
- 25/100