I wasn't able to find discussion of Observable proposal here, so as mentioned by @ljharb, posting it.
Minimal Observable interface:
type Callback<T extends Array<any> = [], U = void> = (...args: T) => U
class Observable<T> {
constructor(
setup: Callback<[
Callback<[T]>, // Value
Callback<[any]>, // Error
Callback, // Complete
], void | Callback<[], any>>
)
subscribe(
value: Callback<[T], any>,
error?: Callback<[unknown], any>,
complete?: Callback<[], any>
): Subscription
}
class Subscription {
unsubscribe(): void
}
Usage
const values = new Observable((next, _error, complete) => {
next('foo')
setTimeout(complete, 1000)
})
const subscription = values.subscribe(
console.log, // "foo"
console.error,
console.warn, // Will run with empty message
)
That primitive seems to be minimal layer needed for interop between existing libs. Too many reactive implementations exist nowadays, and there's friction switching between them due to lack of standard.
Proposal: Retain core API and leave operators to user-land libraries ยท Issue #210 ยท tc39/proposal-observable ยท GitHub
What work would it require to move forward with the proposal?