因此,我试图在一个表的实例中协调两个单独的接口,该表希望使过滤成为可选表,因此我从两个接口开始(为此省去了其余的实现)。一种保存有关列的数据,另一种保存过滤的数据
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
,所以我想看看是否有可能使打字稿引发错误。这样可能吗?
谢谢!
答案 0 :(得分:0)
我能想到的最接近的是string literal types。仅当您说列定义将成为编译代码的一部分时,这才是有效的解决方案:
type ColumnHeaderId = 'name' | 'age';
interface Column {
headerTitle: string;
headerId: ColumnHeaderId;
}
interface Filter {
filteredHeaderIds: ColumnHeaderId[];
noDataMessage: string;
}
但是,如果您希望完全动态地生成列,那么我认为您将不得不实施对ID字段匹配的运行时逻辑检查。