ObservableInput<T> should support Thennable<T>, not PromiseLike<T>
benlesh opened this issue · 1 comments
The type on ObservableInput
is probably too strict.
We'll want to support Thennable<T>
instead, as that's all that is required to convert with from
et al.
interface Thennable<T> {
then(onresolved?: ((value: T) => void) | null | undefined, onrejected?: ((reason: any) => void) | null | undefined): void;
}
The upside is we can then support more. The downside is if we decide we need to rely on the returned value of the then
function, It'll require a breaking change.
Implementor note: We probably don't want to publicly expose Thennable
, I'm sure a lot of folks already have that implemented in their codebase. It's been a mistake that we export *
from types, honestly.
// Define the Thennable interface
interface Thennable {
then(onresolved?: ((value: T) => void) | null | undefined, onrejected?: ((reason: any) => void) | null | undefined): void;
}
// Function that takes an ObservableInput
function processObservable(observable: Thennable) {
// Simulate processing the observable
observable.then(
(value) => {
console.log("Resolved:", value);
},
(reason) => {
console.error("Rejected:", reason);
}
);
}
// Example usage
const myObservable: Thennable = {
then: (onresolved, onrejected) => {
// Simulate resolving the observable after a delay
setTimeout(() => {
if (Math.random() < 0.5) {
onresolved?.("Success");
} else {
onrejected?.("Failure");
}
}, 1000);
},
};
// Process the observable
processObservable(myObservable);