How to define type in type-script for dynamic property name?


Problem 😱

You would like to create type for following object with dynamic property name:

const gallery = {
  homepage: {
    key: 'gallery-of-users',
    activeSlide: 1,
  },
  feed: {
    key: 'gallery-of-posts',
    activeSlide: 10
  }
}

Solution 🤓

export interface IGalleryItem {
  key: string;
  activeSlide: string;
}

export interface IGallery {
  [slideKeyWhichIsDynamic:string]: IGalleryItem;
}

Usage:

const gallery: IGallery = {
    ...
}