microsoft / microsoft/TypeScript

Readonly properties type narrowing doesn't flow into inner function scopes

オープン
#29,281 コメント 5 件 リアクション 1 件 担当者 0 名 GitHub で見る

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

Domain: check: Control Flow Experience Enhancement Suggestion
主要言語
Go
スター
111k
フォーク
14.4k
平均マージ
1日 19時間
マージ済み PR(30日)
117

説明

TypeScript Version: 3.3.0-dev.20190105

Search Terms: Readonly, strictNullChecks, optional, inner function

Code

Using strictNullChecks: true:

interface Thing {
    foo?: (a: number) => boolean;
}

const t: Readonly<Thing> = {
    foo: (a) => true,
};

if (t.foo !== undefined) {
    const bar = () => {
        t.foo(5);
    }
}

Expected behavior:

👍 Compile

Actual behavior:

On the expression t.foo(5); the following error:

Cannot invoke an object which is possibly 'undefined'.
(property) foo?: ((a: number) => boolean) | undefined

Playground Link: https://www.typescriptlang.org/play/index.html#src=interface%20Thing%20%7B%0D%0A%20%20%20%20foo%3F%3A%20(a%3A%20number)%20%3D%3E%20boolean%3B%0D%0A%7D%0D%0A%0D%0Aconst%20t%3A%20Readonly%3CThing%3E%20%3D%20%7B%0D%0A%20%20%20%20foo%3A%20(a)%20%3D%3E%20true%2C%0D%0A%7D%3B%0D%0A%0D%0Aif%20(t.foo%20!%3D%3D%20undefined)%20%7B%0D%0A%20%20%20%20const%20bar%20%3D%20()%20%3D%3E%20%7B%0D%0A%20%20%20%20%20%20%20%20t.foo(5)%3B%0D%0A%20%20%20%20%7D%0D%0A%7D%0D%0A%0D%0A

Related Issues:

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

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

はじめの一歩

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

調査の方向性

提供された TypeScript の再現コードとその Playground リンクから始め、arrow function 内の readonly のオプショナルプロパティに対する制御フローの narrowing に焦点を当ててください。報告されたエラーを確認し、関連する issue と動作を比較してください。完了の条件は、undefined の呼び出しを誤って許可せずに例がコンパイルできることです。

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

評価

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

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

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