microsoft / microsoft/TypeScript

Weak type not rejected when intersected with `ThisType`

オープン
#56,995 コメント 6 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

Bug Domain: This-Typing Help Wanted
主要言語
Go
スター
111k
フォーク
14.4k
平均マージ
1日 19時間
マージ済み PR(30日)
117

説明

🔎 Search Terms
  • function overload
  • ThisType
  • this
🕗 Version & Regression Information
  • This is a crash
⏯ Playground Link

https://www.typescriptlang.org/play?#code/JYOwLgpgTgZghgYwgAgGIHt3IN4ChnJwBcyAzmFKAOa4C+uAJhAgDZxQowCuICYw6EMm4gADAAp2VEuICUyALwA+ZOPzIAZGkzqtAFQAWwUnoCeABwgAeDOiW5ZskgDd0wBo2ZsOwnnwFCIhJSMrrIAArs-HAsNpj2BPpGJhbWtvaOLm4euEHieAD0BcgAegD86sTIAOQAjNV0srk8EnKKKvm4RaUVBFV1DbSOXcUAAmCkALQQAB6WfNNQUOhQzWLibcqqhcXllSS1jU1AA

💻 Code
interface Foo {
  a: string
}
declare function fun0(arg: () => (
  & Foo
  & ThisType<Foo>
)): void
declare function fun0(arg: (
  & Partial<Foo>
  & ThisType<Foo>
)): void

fun0({
// ^? function fun0(arg: (Partial<Foo> & ThisType<Foo>)): void (+1 overload)
  a: '1'
})
fun0(() => ({
// ^? function fun0(arg: () => (Foo & ThisType<Foo>)): void (+1 overload)
  a: '1'
}))
// @ts-expect-error
fun0(() => ({
// ^? function fun0(arg: (Partial<Foo> & ThisType<Foo>)): void (+1 overload)
  a: 1
}))

When I intersect ThisType with a type similar to {} and use it as a function argument, it will always resolve to this declaration.

🙁 Actual behavior

overload to function fun0(arg: (Partial<Foo> & ThisType<Foo>)): void (+1 overload)

🙂 Expected behavior

overload to function fun0(arg: () => (Partial<Foo> & ThisType<Foo>)): void (+1 overload)

Additional information about the issue

When I comment ThisType intesection, it works.
image

コントリビューションガイド

コントリビューションガイドを開く

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

調査の方向性

リンクされている TypeScript Playground の例から始め、ThisType、Foo、Partial に関係するオーバーロード解決の挙動を再現してください。ThisType との交差型および関数引数をコンパイラーがどのように処理するかを追跡してください。3 番目の呼び出しが拒否され、推論されたオーバーロードがクラッシュせずに期待される関数型と一致すれば完了です。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
typescript
領域
compilers
issue の種類
バグ
難易度
4/5
見積もり時間
3〜5日
活発さ
停滞
明瞭さ
おおむね明確
初心者へのやさしさ
42/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。