Skip to content

Instantly share code, notes, and snippets.

@jansabbe
Created June 29, 2017 20:42
Show Gist options
  • Save jansabbe/a5fffeef3a5e75ef196524bbb2b8fc5d to your computer and use it in GitHub Desktop.
Save jansabbe/a5fffeef3a5e75ef196524bbb2b8fc5d to your computer and use it in GitHub Desktop.
Example of using keyof in typescript
function filter<T, K extends keyof T>(obj : T, keys : [K], value: any) : boolean {
return keys.some(key => obj[key] === value);
}
let person = {
name: "bos",
firstName: "jos"
}
filter(person, ['firstName', "namee"], "jos");
/*
ERROR: Argument of type '["firstName", "namee"]' is not assignable to parameter of type '["firstName" | "name"]'.
*/
@jansabbe
Copy link
Author

jansabbe commented Jun 29, 2017

Instead of value: any you could also use T[K]:

function filter<T, K extends keyof T>(obj : T, keys : [K], value: T[K]) : boolean {
    return keys.some(key => obj[key] === value);
}

let person = {
    name: "bos",
    firstName: "jos"
}

filter(person, ['firstName', "name"], 1);
/*
ERROR: Argument of type '1' is not assignable to parameter of type 'string'.
*/

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment