typescript - Parameters<>-hjelpetype kan ikke slutte typer når man bruker generisk type som indeks


Vurder dette eksempelet, også nedenfor:

enum Options {
    one,
    two,
    three
}

const dictionary = {
    [Options.one]: (a: string, b: boolean) => { console.log({ a: a, b: b }) },
    [Options.two]: (c: number) => { console.log(c) },
    [Options.three]: () => { },
} as const

function complicated<T extends Options>(option: T, ...args: Parameters<typeof dictionary[T]>) {
    const fn = dictionary[option]
    type b = typeof dictionary[T]
    fn(...args) // This error shows for Typescript but running gives no errors.
}

Når man oppretter en type statisk som type One=Parameters<typeof dictionary[Options.one]>, er typen korrekt, som [a: string, b: boolean].

Men ved å bruke den generiske parameteren ovenfor med Parameters<typeof dictionary[T]>, viser fn-variabelen at den er en (arg0: never, b: boolean) => void. Å kalle fn(...arg) blir typekontrollert til å ha feil, selv om skriptet fungerer fint ved kjøring.

Hvorfor er dette, og hva bør gjøres for å eliminere feilen?

Rediger: Dette er for øyeblikket et åpent problem på Github #49802, også referert til i #49700

Relaterte artikler