打字稿:将两个属性之一设为可选

时间:2019-08-16 14:22:21

标签: typescript

我有这样的界面:

export interface Picture {
  id?: string;
  src?: string;
  width: number;
  height: number;
}

我希望模型具有至少idsrc属性之一的值。有没有办法指定?

2 个答案:

答案 0 :(得分:5)

您可以使用union types完成任务:

type PictureBase = {
  width: number;
  height: number;
}

export type Picture = ({ id: string } | { src: string }) & PictureBase;

另请参见discriminated unions上的这篇文章

答案 1 :(得分:0)

您可以扩展这些接口。

interface BasePicture {
  width: number;
  height: number;
}

interface IdPicture extends BasePicture {
  id: string;
}

interface SrcPicture extends BasePicture {
  src: string;
}

export type Picture = IdPicture | SrcPicture;