microsoft / microsoft/TypeScript

Type Inference In Switch Statement Not Work With &&

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

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

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

説明

TypeScript Version: 4.0.0-dev.20200512

Search Terms: switch, inference, switch and inference

Code

interface I1 {
    type: 'I1';
    value: string;
}

interface I2 {
    type: 'I2';
    value: number;
}

type T = I1 | I2;

let t: T | undefined;

if (t && t.type == 'I1') {
    t.value; // Type string
}

switch (t?.type) {
    case 'I1':
        t.value; // Type string
        break;
}

switch (t && t.type) {
    case 'I1':
        t.value; // Uh oh, error
        t!.value; // Uh oh, string | number
        break;
}

Expected behavior:
The compile should understand that t && t.type is like as t?.type except that has also other falsy values.

Actual behavior:
The compiler does not infer from such expression.

Playground Link: https://www.typescriptlang.org/play/?ts=4.0.0-dev.20200512#code/JYOwLgpgTgZghgYwgAgJIEZkG8BQz-JgCeADhAFzIDkGVA3HgQG5wA2ArhcgM5hSgBzBgF8cOUJFiIUqAEzZG+YmUo1Z9RchYcuIdgFsARtBFjlKACrIAvGkwAfNLIY5WEMIUpXH7EABMIGFAIPxdgGGQACg8AMhjCADpzG1sadCoASgUCRO1OOmQAekLkC1IUXn4QARxRHG4Ad2AwBAALKLAAfiTyrNwchDhuFDSqck0csAS8iALi0vKePkEJgkMoCDgAa1N6ppb26OQ4xPM+zUHh6lpxnMnptnyikoBVdoB7VoAaZGgod6gqyUAEIHjo5q8Pt8llUBMhHHojNAgch1psdrUcEA

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

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

はじめの一歩

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

調査の方向性

リンクされている TypeScript Playground の再現例から始め、示されている 3 つの条件の narrowing の挙動を比較します。t \u0026\u0026 t.type を使う switch 式についてコンパイラーの制御フロー解析を追跡します。完了条件は、最後の分岐で t が期待される挙動と一貫して narrowing されることです。

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

評価

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

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

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