Подходит ли интерфейс Typescript для этого объекта? - PullRequest
0 голосов
/ 09 мая 2020

Я хотел бы создать интерфейс Typescript для таких объектов:

{
  "id": 34728,
  "url": "https://example.com/image.jpg",
  "commonNames": {
    "de": ["Apfel", "Kulturapfel"],
    "en": ["apple"],
    "th": ["แอปเปิล"]
  },
}

Правильно ли мой подход? Я особенно не уверен в общих именах.

interface Food {
  id: number;
  url: string;
  commonNames: {
    [index: string]: string[];
  };
}

1 Ответ

1 голос
/ 09 мая 2020

Как уже подтверждено в @ 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 псевдонимов для документации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...