Удалить неопределенный из типа - PullRequest
2 голосов
/ 16 января 2020

Я использую typeof, чтобы вывести тип возвращаемого значения функции, но так как я не могу вызвать реальную функцию, я использую трюк, использующий троичный оператор, чтобы вывести тип, однако это оставляет меня с типом объединения, который включает undefined:

function foo() {
  return { bar: 1 };
}

const fooInstance = true ? undefined : foo(); // foo() is never actually called
type FooOrUndefined = typeof fooInstance;     // {bar: number} | undefined 
type Foo = ???;                               // Should be { bar: number }

Есть ли способ избавиться от undefined от FooOrUndefined?

Ответы [ 2 ]

4 голосов
/ 16 января 2020

Вы хотите использовать NonNullable:

type Foo = NonNullable<FooOrUndefined> // { bar: number; }

Образец

1 голос
/ 16 января 2020

ford04 указал мне на NonNullable, но я также обнаружил, что ReturnType - более чистый способ достижения того, что я пытаюсь сделать:

function foo() {
  return { bar: 1 };
}
type Foo = ReturnType<typeof foo>;
...