Извлекать / охранять обещание, извлекать обещание из смешанного объединения

#typescript

#typescript

Вопрос:

У меня есть объединение, что-то вроде Promise<string> | boolean | void Я хочу иметь возможность передавать эту переменную в защитную функцию и работать с ней, гарантируя, что это обещание.

Я пытаюсь создать защиту для этого.

 function isPromise <T>(t: T) t is Promise<any> {
  return !!maybePromise amp;amp; typeof maybePromise.then === 'function';
}
  

Как я могу извлечь тип обещания отсюда? Возможно ли это?

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

1. Что вы имеете в виду под типом обещания. Я думаю, вы почти на месте: typescriptlang.org/play ? #код/…

Ответ №1:

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

 function isPromise(t: any): t is Promise<any> {
  return t instanceof Promise
}
  

И использовать его в своем коде:

 const someVariable: Promise<string> | boolean | undefined = new Promise(r => r('myString'))

if(isPromise(someVariable)) {
  someVariable.then(result => { /* ... */ })
}
  

На самом деле вам даже не нужна функция защиты для этого, просто используйте instanceof :

 if(someVariable instanceof Promise) {
  // ...
}