microsoft / microsoft/TypeScript
Unable to resolve generic type when using an overloaded function as parameter
オープン
まだ誰も着手していません。
Bug
Domain: check: Type Inference
Help Wanted
- 主要言語
- Go
- スター
- 111k
- フォーク
- 14.4k
- 平均マージ
- 1日 19時間
- マージ済み PR(30日)
- 117
説明
Bug Report
🔎 Search Terms
overload parameter function
🕗 Version & Regression Information
Using the playground, the code works when I choose version 3.3.3. After that version, the problem comes up.
💻 Code
type SpecialType<T> = () => void & { value: T };
function specialFunction<T>(): SpecialType<T>;
function specialFunction<T>(source: Record<string, T>): Record<string, T>;
function specialFunction<T>(source?: Record<string, T>): SpecialType<T> | Record<string, T> {
return source as any;
}
const otherFunction = <K extends keyof T, T>(source: Record<string, T>, property: K): Record<string, T[K]> => ({ source, property }) as any;
const obj: Record<string, { label: string }> = { value: { label: 'hello world' } };
const defined = specialFunction(obj);
const working = otherFunction(defined, 'label');
const nonworking = otherFunction(specialFunction(obj), 'label');
const alsoworking = otherFunction(specialFunction<{ label: string }>(obj), 'label');
🙁 Actual behavior
The non-inlined call chain works and label is recognized as a property name. The inlined call as a parameter states, that the second parameter type is never(instead of keyof T).
🙂 Expected behavior
No different type resolution regardless of the call type.
コントリビューションガイド
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
調査の方向性
TypeScript playground でバージョン 3.3.3 とそれ以降のバージョンを使って例を再現し、その後、2 つの呼び出しにおける 2 番目の引数の推論された型を比較します。インライン呼び出しが、明示的なジェネリック型引数を必要とせずに、非インライン呼び出しと一貫して 'label' を受け入れれば完了です。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- typescript
- 領域
- compilers
- issue の種類
- バグ
- 難易度
- 5/5
- 見積もり時間
- 1週間以上
- 活発さ
- 停滞
- 明瞭さ
- おおむね明確
- 初心者へのやさしさ
- 30/100