打字稿区分带有分解的联合体类型推断

时间:2020-03-26 10:42:45

标签: typescript type-inference destructuring discriminated-union

给出一个有区别的联合:

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. 如果这按预期工作,可以给我们举个例子,说明这可能会失败吗?

其他阅读内容:

1 个答案:

答案 0 :(得分:1)

https://stackoverflow.com/a/59786171/12644421 使用解构将切断statemodel之间的联系