Skip to content

Fix typing of the Observable<boolean> #168

Closed

Description

@brianmhunt

See:

// Broken
function observable<T>(value: T): Observable<T>
{
  return undefined as any;  // the implementation is not important
}

// Fixed
function observable<T>(value: T extends infer U ? U: never): Observable<T>
{
  return undefined as any;  // the implementation is not important
}

Activity

  1. maskmaster commented on Mar 8, 2022

    @maskmaster

    I added an answer in the stackoverflow question. We need to make sure that these two lines remain valid after any fix.

    const x = observable<false | undefined>(false);
    const y = observable(false);
  2. tomhanax commented on Mar 8, 2022

    @tomhanax

    For now the best I can offer is:

    // Fixed
    function observable<T, U = any>(value?: T extends infer R ? R : U): unknown extends T ? Observable<U> : Observable<T>
    {
      return undefined as any;  // the implementation is not important
    }

    The playground contains many examples and seems OK, of course anybody can check and correct if needed, I am no expert in this.

    Playground Link

  3. brianmhunt commented on Mar 8, 2022

    @brianmhunt
    MemberAuthor

    Thanks @maskmaster , @tomhanax the answer & playground are very helpful.

    direct link to the SO question

  4. chuanqisun commented on May 20, 2022

    @chuanqisun

    Hi, I believe I'm hitting the same issue when upgrading to typescript 4.6 but I might need some help understanding the workaround. Here is a minimum repro.

    image

    The ExtendedType is clearly assignable to the BaseType, but typescript wouldn't allow. Also, the error suggests that typescript is trying to assign BaseType to ExtendedType, which is opposite to the desired direction.

    Should I manually patch the type definitely of KnockoutObservable? I'm not sure how that might work. Thank you and let me know if I should cross post to other repos.

  5. mbest commented on Jul 15, 2022

    @mbest
    Member

    This was fixed in TypeScript: microsoft/TypeScript#48380

  6. phillipc commented on Nov 22, 2025

    @phillipc
    Member

    We have corrected all the TKO typings in #202. Specifically, this case with a newer version of TypeScript.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions