Skip to content

autocompletion failing in 3.7.1-rc #34825

Closed
@chandu0101

Description

@chandu0101

TypeScript Version: 3.7.1-rc

Search Terms:

Code

export type GeMethodsForType<T, G extends string> = { [K in keyof T]:
    T[K] extends () => any ? { name: K, group: G, } : T[K] extends (s: infer U) => any ? { name: K, group: G, payload: U } : never }[keyof T];


class Sample {
    count = 0;
    books: { name: string, year: number }[] = []
    increment() {
        this.count++
        this.count++
    }

    addBook(book: Sample["books"][0]) {
        this.books.push(book)
    }
}
export declare function testIt<T, G extends string>(): (input: any, method: GeMethodsForType<T, G>) => any


const t = testIt<Sample, "Sample">()

const i = t(null, { name: "addBook", group: "Sample", payload: { } }) // auto completion for payload

Expected behavior:
Propeties of payload should come in autocompletion
Actual behavior:
No autocompletion
Playground Link: play ground nightly

Working fine in 3.7 beta and 3.6.x

play ground 3.7 beta

Looks like its getting confused when some properties doesn't contain payload property in this case increment method , if i change GeMethodsForType to

export type GeMethodsForType<T, G extends string> = { [K in keyof T]:
    T[K] extends () => any ? { name: K, group: G, payload?:undefined} : T[K] extends (s: infer U) => any ? { name: K, group: G, payload: U } : never }[keyof T]; // payload added  empty arg methods

now autocompletion working fine in 3.7.1-rc :s

Metadata

Metadata

Assignees

Labels

BugA bug in TypeScriptFix AvailableA PR has been opened for this issue

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions