При наличии различимого объединения:
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;
}
Что я хотел бы знать, это:
- Это работает как задумано или это недостаток в текущей реализации машинописного текста?
- Если это работает как задумано Можно ли показать нам пример, где это сломалось бы?
Дополнительное чтение: