Типизированный вывод типа объединения с распечаткой - PullRequest
0 голосов
/ 26 марта 2020

При наличии различимого объединения:

type ViewModel<T> =
  | { state: State.LOADING,   model: undefined }
  | { state: State.READY,     model: T         }
  | { state: State.NOT_FOUND, model: null      }

Эта форма вывода типа работает:

switch (viewModel.state) {
  case State.LOADING:
    viewModel.model; // undefined
    break;
  case State.READY:
    viewModel.model; // Foo
    break;
  case State.NOT_FOUND:
    viewModel.model; // null
    break;
}

, но эта не работает (единственное отличие - деструктуризация объекта):

const { state, model } = viewModel;
switch (state) {
  case State.LOADING:
    model; // Foo | null | undefined
    break;
  case State.READY:
    model; // Foo | null | undefined
    break;
  case State.NOT_FOUND:
    model; // Foo | null | undefined
    break;
}

Что я хотел бы знать, это:

  1. Это работает как задумано или это недостаток в текущей реализации машинописного текста?
  2. Если это работает как задумано Можно ли показать нам пример, где это сломалось бы?

Дополнительное чтение:

...