2017-08-12

TypeScript - A polyfill to extend the Object class to add a values property to complement the keys property

I expect you've used Object.keys at some point. Here is how to extend the Object class to add a values property. This kind of thing is useful when you have a lookup of keys where all of the values are the same type, such as the following object you'd expect to see in a Redux app.

{
  "gb": { code: "gb", name: "Great Britain" },
  "us": { code: "us", name: "United States" }
}

The code


interface ObjectConstructor {
  values<T>(source: any): T[];
}

/**
 * Extends the Object class to convert a name:value object to an array of value
 * @param source
 * @returns {T[]}
 */
Object.values = function<T>(source: any): T[] {
  const result = Object.keys(source)
    .map(x => source[x]);
  return result;
}

No comments: