Typescript Generics can be used in functions to constrain the types of other arguments provided to the same function. Let's explore this idea!
A simple use case
Let's say we want to create a function that sets the key of an object. A fairly simple task; we might write is in JavaScript as follows:
function setObjectKey(obj, key, value) { obj[key] = value; }
Then, in practice, we might use it like this:
const person = { name: "Jorge", age: 22 } setObjectKey(person, age, 23);
In doing so, we set the age
property on the person
object to the value 11
.
Doing this with type safety
So how can we achieve type safety when performing this operation? Using Generics!
Using Generics, we'll specify that our object is of type O
, the key is of type K
, and the value must be of type O[K]
.
function setObjectKey<O, k extends keyof O>(obj: O, key: K, value: O[K]) { obj[key] = value; }
Now, when we try to violate the type of a particular key, our Typescript compiler yells at us!
Hooray for failing faster with Typescript!
Top comments (0)