Skip to content

type error in observable subscribe function overloads #6717

@vthinkxie

Description

@vthinkxie

Describe the bug

function handleObservableOrNext<T>(
  observable: Observable<T>,
  observerOrNext?: Partial<Observer<T>> | ((value: T) => void)
) {
  observable.subscribe(observerOrNext);
  // type error here
}

Expected behavior

no type error

Reproduction code

As described above

Reproduction URL

https://stackblitz.com/edit/typescript-vrgcva

Version

latest

Environment

No response

Additional context

  • Should the next param here be optional?

    subscribe(next: (value: T) => void): Subscription;

    I think this param should be optional, since the implements of the overload support optional
    observerOrNext?: Partial<Observer<T>> | ((value: T) => void) | null,

  • Are the overloads here good overloads?
    According to Writing Good Overloads in typescript handbook, with the same argument count and same return type, I don't think 2 different overloads here is good overloads.

Always prefer parameters with union types instead of overloads when possible.

subscribe(observer?: Partial<Observer<T>>): Subscription;
subscribe(next: (value: T) => void): Subscription;

could be merged into one overload function like

subscribe(observer?: Partial<Observer<T>> | ((value: T) => void)): Subscription;

ref: https://www.typescriptlang.org/docs/handbook/2/functions.html#writing-good-overloads

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions