我试图写一个接受记录类型和记录键的泛型类。一切顺利,直到我必须产生默认值。
export type SortByProps<Record, S extends keyof Record> = {
sortByItems: Array<SelectFieldType>
setSort: (sort: Option<SortParameters<S>>) => void
sort: Option<SortParameters<S>>
};
type SortByState = {
currentSort: SelectFieldType
currentSortDirection: SortDirection
};
export default class SortBy<Record, S extends keyof Record> extends React.PureComponent<SortByProps<Record, S>, SortByState> {
constructor(props: SortByProps<Record, S>) {
super(props);
const {field, direction} = this.props.sort.getOrElseValue(
{field: 'name', direction: 'ASC'} // Compile error => Type '"name"' is not assignable to type 'S'.
);
this.state = {
currentSort: R.find(R.propEq('value', field), this.props.sortByItems),
currentSortDirection: direction
};
}
在代码中,我需要提供默认值,如果道具排序&#39;被设置为“无”#39;但是,sort的field属性需要成为记录的关键。我只想选择第一个键,但我不知道该怎么做。
BTW:我解决了编译错误,但我认为如果能让它工作,另一种方式会更优雅。这是我的解决方法:constructor(props: SortByProps<Record, S>) {
super(props);
this.props.sort.fold(
() => {
this.state = {
currentSort: this.props.sortByItems[0],
currentSortDirection: 'ASC'
};
},
({field, direction}) => {
this.state = {
currentSort: R.find(R.propEq('value', field), this.props.sortByItems),
currentSortDirection: direction
};
}
);
}