как удалить уточнение типа объединения унаследованного типа с неопределенным в TypeScript или Flow

#typescript #flowtype

#typescript #flowtype

Вопрос:

У меня есть типизация, которую я унаследовал и импортирую из библиотеки, и мне было интересно, как я могу удалить ее допуск для нулевых или неопределенных значений.

 type Foo = {
    baz: string
}

// Bar type is inherited and I would like to kill the union with undefined so I expect foo to never be falsey.
type Bar = {
    foo?: Foo
}
const bar: Bar = {foo: {baz: 'baz'}};
// this destructuring issues an error because it allows for the possibility of it being undefined and undefined can't be destructured. And I can't conditionally exit since I'm using React hooks and I'd be violating the hooks should not be used conditionally rule
const {baz} = bar.foo;
  

Ответ №1:

Во встроенном typescript есть тип утилиты, который называется Required, вы можете использовать его, как показано ниже

 type Foo = {
  baz: string
}

type Bar = {
  foo?: Foo
}

type StrictBar = Required<Bar>
// type StrictBar = { foo: Foo } inferred

  

Комментарии:

1. потрясающе! есть ли аналогичный инструмент для Flow? проблема на самом деле была проблемой потока, и я надеялся, что существует решение, не зависящее от инструментов. Еще раз спасибо!

2. после просмотра ссылки я увидел эквивалент для Flow здесь: flow.org/en/docs/types/utilities/#toc-nonmaybe