Tenho uma classe base com várias extensões parecidas com esta:
export interface ProjectOnePagerDTO {
Widgets: IOnePagerWidget[];
Id: string;
}
export interface IOnePagerWidget extends GridsterItem {
Type: OnePagerWidgetType;
}
export interface OnePagerWidgetTypePicture extends IOnePagerWidget {
ProjectLogo: string;
}
export interface OnePagerWidgetTypeProjectDescription extends IOnePagerWidget {
Text: string;
}
Cada extensão, por exemplo, OnePagerWidgetTypePicture, tem seu próprio componente. No modelo, eu faço um loop pela propriedade Widgets do ProjectOnePagerDTO e passo cada widget para seu componente. O componente para OnePagerWidgetTypePicture se parece com isso
export class OpwProjectPictureComponent {
@Input() widget: OnePagerWidgetTypePicture;
}
Agora estou recebendo o seguinte erro: Property 'ProjectLogo' is missing in type 'IOnePagerWidget' but required in type 'OnePagerWidgetTypePicture'
.
O que estou esquecendo? Tenho que mudar o tipo @Input e fazer cast dentro do componente?
Método 1:
Tente usar Genéricos para que ele aceite vários tipos.
Método 2:
Tente usar uma função que determina o tipo com base nas propriedades exclusivas desse tipo.
Código completo:
Demonstração do Stackblitz
Método 3:
Se o componente pai contiver um dos três valores, a matriz não deveria especificar o mesmo?
Aqui podemos especificar um
type
nomeCompositeWidgetType
e atribuí-lo ao array.Agora, quando você passar para o componente filho, ele assumirá o tipo respectivo, já que o tipo pode ser qualquer um dos três tipos.