{
"title": {
"de-DE": "German",
"fr-FR": "French",
"en-CA": "English"
},
"image": "/tile.jpg",
"url": "/url/to/version"
}
У меня есть этот JSON, который я запрашиваю, и моя модель выглядит так:
export class ThisIsMyModel {
title: string;
image: string;
url: string;
}
Как правильно создать подполе для локалей, что-то вроде этого:
export class ThisIsMyModel {
title: string
[
de-DE: string;
fr-FR: string;
en-CA: string;
];
image: string;
url: string;
}






Приведенное вами определение TS не будет работать с вашими данными. title может иметь тип { [key: string]: string }, если хотите. Если это мог также может быть простой строкой, вы можете попробовать { [key: string]: string} | string и иметь дело с тем или иным случаем во время выполнения.
@ TitianCernicova-Dragomir спасибо. Я обновил ответ.
Если набор языков ограничен перечисленными вами, вы можете использовать это определение. Также, если вы просто собираетесь преобразовать объект JSON в тип модели, вам следует использовать интерфейс, а не класс:
export interface ThisIsMyModel {
title: {
'de-DE': string;
'fr-FR': string;
'en-CA': string;
};
image: string;
url: string;
}
Если языки неизвестны, вы можете определить объект с помощью индексатора строк:
export interface ThisIsMyModel {
title: {
[name: string]: string
};
image: string;
url: string;
}
{ [key: "de-DE"|"fr-FR"|"en-CA"]: string}не будет работать, параметр индекса ДОЛЖЕН бытьstringилиnumber