Home > front end >  access specific key of interface with parameter of function
access specific key of interface with parameter of function

Time:05-31

basically speaking i have two interfaces:


interface config {
    lang: "en" | "de";
    test: number;
}

interface Accessor {
    key ( k: keyof config ): config[k];
}

and i want to dynamically have the type of whatever i access from the config type, via the Accessor object. is that possible?



note: my code is a lot more complicated and i cannot just access the keys directly, but it boils down to this in the end

CodePudding user response:

The key() method signature in your Accessor interface should return an indexed access type of the form Config[X] where X is the type of the k parameter. Your attempt, Config[k], is not valid, because k is the value of the parameter; you need its type. This can be remedied using the typeof type operator like so:

interface Accessor {
    key(k: keyof Config): Config[typeof k];
}

This now compiles with no error. And you can even use it:

declare const a: Accessor;
const langProp = a.key("lang");
// const langProp: number | "en" | "de"            
  • Related