Angular 接口只能扩展一个类或另一个接口

Angular 接口只能扩展一个类或另一个接口,angular,typescript,Angular,Typescript,我们使用的是typescript 2.9.2 我无法扩展此接口下拉选项。获取错误“错误TS2312:接口只能扩展类或其他接口。” 有没有一种不同的编写方法可以避免使用类型,从而使其成为纯接口并可以扩展 export interface BaseDropdownOption { id: string; } export interface ValueDropdownOption extends BaseDropdownOption { value: string; template?:

我们使用的是typescript 2.9.2

我无法扩展此接口下拉选项。获取错误“错误TS2312:接口只能扩展类或其他接口。”

有没有一种不同的编写方法可以避免使用类型,从而使其成为纯接口并可以扩展

export interface BaseDropdownOption {
  id: string;
}
export interface ValueDropdownOption extends BaseDropdownOption {
  value: string;
  template?: never;
}
export interface TemplateDropdownOption extends BaseDropdownOption {
  template: TemplateRef<any>;
  value?: never;
}
export type DropdownOption = ValueDropdownOption | TemplateDropdownOption;


不能扩展并集,但可以使用交集添加特性:

export type DropdownOptionExt = DropdownOption & {
  payload: any
  name: string
}
这相当于:

export type DropdownOptionExt = 
     | (ValueDropdownOption & { payload: any; name: string; }) 
     | (TemplateDropdownOption & { payload: any; name: string; })

但这并不完全是一回事。@robertomasás取决于你想要实现什么。如果希望结果是在联合的每个成员上都有额外属性的类型,这将实现该结果注意额外属性是相互关联的exclusive@robertotom在这种情况下,类型和接口之间的区别并不重要,联合不能是接口。@robertotomás Design Limition。扩展时必须知道接口属性,联合不符合条件。但是上面的答案是很好的选择,让我知道如果出于某种原因它对你不起作用,我是古玩为什么。,
export type DropdownOptionExt = 
     | (ValueDropdownOption & { payload: any; name: string; }) 
     | (TemplateDropdownOption & { payload: any; name: string; })