#Using object lookup for generic function parameters

14 messages · Page 1 of 1 (latest)

barren spindleBOT
#
Frosk#6439

Preview:```ts
type ConfigGoogleSheets = {
spreadsheetId: string
valueRange: string
apiKey: string
}
const providers = {
rest: () => {},
"google-sheets": (config: ConfigGoogleSheets) =>
"https://sheets.googleapis.com/v4/spreadsheets/" +
config.spreadsheetId +
"/values/" +
config.valueRange +
"/?key=" +
config.apiKey,
}

type Providers = typeof providers
type Provider = keyof Providers

export const requestBuilder = <T extends Provider>({
type,
config,
}: {
type: T
config: Parameters<Providers[T]>[0]
}) =>
...```

serene ridge
#

How can I tell typescript that providers[type] will always take the correct config associated with it from the lookup object providers?

serene ridge
#

!help

#

!helper

onyx lava
#

wdym

serene ridge
#

so if I use the function requestBuilder ("google-sheets", ...) I would then be getting auto-complete for the google-sheets config

onyx lava
#

@serene ridge you mean requestBuilder({ type: "google-sheets", ...?

serene ridge
#

yeah, my bad

#

I know I could use function overloads but I would like it to be generated just from the lookup object

onyx lava
#

@serene ridge u can do that

serene ridge
#

Do I just use as to avoid the error in the function declaration?

onyx lava
#

@serene ridge honestly I don't know

#

I would use as and ignore it

serene ridge
#

cool ty