Hur definierar man valfri data i ett TypeScript-gränssnittobjekt?


Hur definierar man ett TypeScript-gränssnitt som har valfri data inuti ett objekt?
Det jag menar med det:

export interface IMyInterface 
{
  name: string;
  data: 
  {
    size: number;
    color?: string;
    [any: string]?: any; // Error on this line!!!
  };
};

Jag vet att du kan definiera valfri data med tecknet '?' på detta sätt:

color?: string;

men hur man definierar ytterligare-valfri-data inuti ett objekt

let myObj: IMyInterface = 
{
   name: "theName",
   data:
   {
      size: 10,
      color: "red",
      moreOptionalData: { x: 'y' } // This line will throw an error (incampatable interface)
   }   
};

Svar #1

Tack vare CRice:s kommentar och OJ-Kwons insikt var lösningen ganska enkel, jag behövde bara ta bort '?' tecknet.

export interface IMyInterface 
{
  name: string;
  data: 
  {
    size: number;
    color?: string;
    [any: string]: any; // optional additional data (no need for '?')
  };
};

let myObj: IMyInterface = 
{
   name: "theName",
   data:
   {
      size: 10,
      color: "red",
      moreOptionalData: { x: 'y' } // Now it's OK
   }   
};

Svar #2

Själva indexsignaturen indikerar att objektet kan ha vissa nyckelbaserade värden och eftersom den fungerar utan något värde, är det inte mycket mening att ange den som valfri - anledning till att TSC inte tillåter att specificera den som valfri via ?: https://github.com/Microsoft/TypeScript/issues/7118