What I want to do is very simple, I have a class called Config
. Inside this class, I have some fields and each one have a different type.
Right now I have a method that basically accepts the field name as the argument and return the value of it, like this:
get(key: Extract<keyof Config, string>): any {
// this.config is my Config class
return this.config[key];
}
The argument works great, I get auto complete for all the field names in my Config
class, but based on that, I want to infer the return type of this function. So let's say that the field I'm trying to get has the DbConfig
type, when I call this get
method, I want the return to be DbConfig
as well, and not use any like I did in the example above.
Is that possible? If so, how to do that?
CodePudding user response:
You can use the key
parameter as a generic type K
. K
can then be used to index Config
for the return type.
function get<K extends keyof Config & string>(key: K): Config[K] {
return config[key]
}