接口属性的类型为不同的接口属性

时间:2019-06-19 01:16:09

标签: javascript typescript types

因此,我试图在一个表的实例中协调两个单独的接口,该表希望使过滤成为可选表,因此我从两个接口开始(为此省去了其余的实现)。一种保存有关列的数据,另一种保存过滤的数据

interface Column {
  headerTitle: string;
  headerId: string;
}

interface Filter {
  filteredHeaderIds: string []; // I would like this to be of type of headerId
  noDataMessage: string;
}

在上述实现中,我希望将filterHeaderIds绑定到用户作为Column的一部分实现的任何内容。
示例:

const columns: Column[] = [{
  headerTitle: 'Person Name',
  headerId: 'name',
}, {
  headerTitle: 'Person Age',
  headerId: 'age',
}];

const filterData: Filter = {
  filteredHeaderIds: ['name','throwError'], 
  noDataMessage: 'No Data Found',
}

由于throwError不是定义的headerId,所以我想看看是否有可能使打字稿引发错误。这样可能吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

我能想到的最接近的是string literal types。仅当您说列定义将成为编译代码的一部分时,这才是有效的解决方案:

type ColumnHeaderId = 'name' | 'age';

interface Column {
  headerTitle: string;
  headerId: ColumnHeaderId;
}

interface Filter {
  filteredHeaderIds: ColumnHeaderId[];
  noDataMessage: string;
}

但是,如果您希望完全动态地生成列,那么我认为您将不得不实施对ID字段匹配的运行时逻辑检查。