microsoft / microsoft/TypeScript
Contextual inference for nested calls that return constructors
オープン
まだ誰も着手していません。
Domain: check: Type Inference
Help Wanted
Possible Improvement
- 主要言語
- Go
- スター
- 111k
- フォーク
- 14.4k
- 平均マージ
- 1日 19時間
- マージ済み PR(30日)
- 117
説明
#54813 attempted to make this work, but exposed an underlying bug that caused too many instantiations. Once that bug is fixed, the code in #54813 should be re-applied if possible.
Here's an example of something that should work, but doesn't:
// @strict: true
// @noEmit: true
interface Action<TContext> {
new (ctx: TContext): void;
}
declare class AssignAction<TContext> {
constructor(ctx: TContext);
}
declare function assign<TContext>(
assigner: (ctx: TContext) => void
): {
new (ctx: TContext): AssignAction<TContext>;
}
declare function createMachine<TContext>(config: {
context: TContext;
entry: Action<TContext>;
}): void;
createMachine({
context: { count: 0 },
entry: assign((ctx) => { ctx }),
});
ctx should have type { count: number }, inferred from the context of assign, but doesn't.
コントリビューションガイド
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
調査の方向性
まず、提供された strict、noEmit の再現を実行し、#54813 で試みられたアプローチを読んでください。コンストラクターを返すネストされた呼び出しによってインスタンス化が多すぎる原因を追跡し、その後、その修正を再適用できるかどうかを判断してください。例が過剰なインスタンス化を導入せずに ctx を { count: number } として推論できれば完了です。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- typescript
- 領域
- compilers
- issue の種類
- バグ
- 難易度
- 5/5
- 見積もり時間
- 1週間以上
- 活発さ
- 停滞
- 明瞭さ
- おおむね明確
- 初心者へのやさしさ
- 25/100