我在打字稿中有以下类型
export type Excludable<T extends FilterValue> = T & { isExcluded?: boolean }
其中FilterValue:
export type FilterValue = {
id: number,
label: string,
}
类型T可能如下:
export type AreaFilterValue = FilterValue & {
type: "Area",
taxonomy?: LocationTaxonomy,
}
我可以在C#中以某种方式编写上述内容吗?
理想情况下,我需要类似的东西:
public class Excludable<T> : T where T : FilterValue
{
bool? IsExcluded { get; set; }
}
但它显示错误“无法从T派生,因为它是一个类型参数”
我想要实现的目标是:
{ id, label }
{ id, label, isExcluded }
{ id, label, isExcluded, type, taxonomy }
修改:我目前在C#中设置FilterValue
具有isExcluded
属性
理想情况下,我想在我的代码中使用它,如下所示:
public Excludable<AreaFilterValue>[] OpenAreas { get; set; }
答案 0 :(得分:2)
& { isExcluded?: boolean }
Bassicaly是匿名扩展接口:
public interface FilterValueExt : FilterValue {
bool? IsExcluded { get; set; }
}
您无法在c#中创建通用子类,因此对Excludable
的每次使用都必须创建新接口或使用Excludable
作为接口并在任何使用此方法的类上实现:
public interface Excludable
bool? IsExcluded { get; set; }
}
pulic class AreaFilterValue : FilterValue, Excludable {
// implementation here + type: "Area", taxonomy?: LocationTaxonomy,
}
我建议你在打字稿中做同样的事情:
interface Excludable{
isExcluded?: boolean
}
var t= {isExcluded: true||false||undefined}; // typescript knows this is/canbe a excludable