Как я могу сделать несколько свойств интерфейса типа на машинопись - PullRequest
0 голосов
/ 30 октября 2018

Я хочу сделать свойство интерфейса с двумя различными интерфейсами в машинописи. это возможно?

interface IPayload1 {
  id: string;
  name: string;
}
interface IPayload2 {
  id: string;
  price: number;
}

interface Demo {
  // Can this be possible?
  payload: IPayload1 | IPayload2;
}

1 Ответ

0 голосов
/ 30 октября 2018

Ваш код будет работать, и можно сказать, что свойство может быть одним из списка типов, используя |. Это называется Union Type .

Обратите внимание, что при работе с объединенными типами вам может понадобиться использовать защиту типов или приведение типов в тех случаях, когда вы хотите получить доступ к свойствам, относящимся к менее чем всем перечисленным типам. Например:

const demo: Demo = {
  payload: {
    id: '1',
    name: 'boo',
  },
};

const demo2: Demo = {
  payload: {
    id: '1',
    price: 25,
  },
};

// property is shared between types
demo.payload.id;

// If you do not cast, these will yield errors because the properties are not shared
(demo.payload as IPayload1).name;
(demo.payload as IPayload2).price;
...