Skip to content

spread operator infer to wrong type with method override and genericΒ #59281

Closed as not planned
@syi0808

Description

@syi0808

πŸ”Ž Search Terms

generic spread

πŸ•— Version & Regression Information

  • This changed on version 5.3.0-dev.20231027

⏯ Playground Link

https://www.typescriptlang.org/play/?ts=5.5.3&ssl=9&ssc=72&pln=10&pc=79#code/C4TwDgpgBAsg9gYwNYDECGDhwE4gOoCWwAFgBIQA2k2APDFALxQCuAdkq3AO6sB8jUABQBYAFBQoBALZgcwAPLYCAcwKs0FAFw0AKlAgAPYBFYATAM6wBMXoICUjfgAVscKQXMRdvMQ4bO0bGACDRoAJQgEHFMaJAgQOAAzWAAaKDRWEF4fUVBIKBc3Dwh4ZHRMHHwiMkpqOgE2Dm4+ARFxSRk5RRU1DU0oXX0jEwsrJht7RwLXd09vXynC2a8nQODQiKjsGLiE5Jg0jKzssTEo1nNgFmCtKABvMQkpRCRvQWfTZgoIfqXi7zSiQwWFwAH5+qVUMDKoQSOQqBBaDpeHZ+gA3OAEUyPKDPZBvD5fH7TIpzZGA6Fg34zYqQ8ogqpw2qI7yoqAYrFiAC+Age7TxSH6gkm-nuXIcaEsR25AG5TqJBJKQKwEFBEmxMAQ4KxJnyJMwbgA6AWCaSyIKCADkYDQJEtdkO5mVqtNnSC3VU6gofn4gj1EighqDiq4aCIHXNCiUno09jsOPFdjlonF9hlQA

πŸ’» Code

type MockFactoryWithHelper<M = unknown> = (
  importOriginal:<T extends M = M>() => Promise<T>
) => Partial<Record<keyof M, any>>
type PromiseMockFactoryWithHelper<M = unknown> = (
  importOriginal: <T extends M = M>() => Promise<T>
) => Promise<Partial<Record<keyof M, any>>>

const util: {
  mock<T>(module: Promise<T>, factory?: MockFactoryWithHelper<T>): void
  mock<T>(module: Promise<T>, factory?: PromiseMockFactoryWithHelper<T>): void
} = {
  mock: (() => {}) as any
};

(async function() {
  util.mock(import('path'), async (importOriginal) => ({
    ...(await importOriginal())
  }));
})();

πŸ™ Actual behavior

Typescirpt throw error like Spread types may only be created from object types.(2698); on line spread syntax

πŸ™‚ Expected behavior

Typescirpt should not throw error on inline spread syntax.

Additional information about the issue

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    Not a DefectThis behavior is one of several equally-correct options

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions