Как уже подтверждено в @ Nicholas Tower в комментарии , ваш подход правильный.
Однако есть небольшое улучшение, которое я хотел бы предложить: у вас есть три string
s в определении вашего типа. Однако на самом деле эти три string
означают совершенно разные вещи. Итак, я бы дал им псевдоним type
:
type Uri = string;
type Language = string;
type Name = string;
interface Food {
id: number;
url: Uri;
commonNames: {
[index: Language]: Name[];
};
}
Это всего лишь псевдонимы, поэтому они фактически ничего не меняют при вводе. Но они немного проясняют суть этих атрибутов.
Кроме того, псевдоним type
дает вам место, куда вы можете прикрепить комментарий TSDo c:
/**
/ * A globally unique, monotonically increasing identifier for a dictionary entry
**/
type Id = number;
/**
/ * A URI
**/
type Uri = string;
/**
/ * A URI referencing a picture of the food
**/
type PictureUri = Uri;
/**
/ * An ISO 639-1:2002 Alpha-2 Language Code
**/
type Language. = string;
/**
/ * The name of the food
**/
type Name = string;
interface Food {
id: Id;
url: PictureUri;
commonNames: {
[index: Language]: Name[];
};
}
Это, конечно, крайний пример, но он показывает значение type
псевдонимов для документации.