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
