打字稿到相应的C#语法

时间:2018-03-30 09:59:36

标签: c# typescript typeconverter

我在打字稿中有以下类型

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派生,因为它是一个类型参数”

我想要实现的目标是:

  1. { id, label }
  2. { id, label, isExcluded }
  3. { id, label, isExcluded, type, taxonomy }
  4. 修改:我目前在C#中设置FilterValue具有isExcluded属性

    理想情况下,我想在我的代码中使用它,如下所示:

    public Excludable<AreaFilterValue>[] OpenAreas { get; set; }
    

1 个答案:

答案 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