export interface IElementBase> { type: TType; getProp: (prop: K) => Promise; setProp(prop: K, value: TProps[K] | null | undefined): Promise; } export type IElement = IElementBase<'text', { text: string; }> | IElementBase<'image', { src: string; responsive: boolean; }> | IElementBase>;