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