【发布时间】:2019-04-28 07:22:08
【问题描述】:
给定以下向组件添加排序状态的 React HOC:
import React, {Component, ComponentClass, ComponentType} from 'react'
interface WithSortState {
sortOrder: string
}
interface WithSortInjectedProps {
sortOrder: string
onSort: (event: React.ChangeEvent<HTMLSelectElement>) => void
}
const withSort = () => (WrappedComponent: ComponentType<WithSortInjectedProps>): ComponentClass<WithSortInjectedProps> => {
class WithSort extends Component<WithSortInjectedProps, WithSortState> {
state = {
sortOrder: 'created_at_desc'
};
handleSort = (sortEvent: React.ChangeEvent<HTMLSelectElement>) => {
this.setState({
sortOrder: sortEvent.target.value
})
};
render() {
` return (
<WrappedComponent
sortOrder={this.state.sortOrder}
onSort={this.handleSort}
{...this.props}
/>
)
}
}
return WithSort
};
export default withSort
当我手动将状态属性 sortOrder 设置为“123”时,编译器会抱怨 sortOrder 是一个字符串。但是,如果我对WrappedComponent 上的sortOrder 执行相同操作,编译器不会抛出任何错误。例如,sortOrder={123} 编译,即使接口指示该属性应该是字符串。
为什么会这样?我在 Typescript 方面做错了吗?
【问题讨论】:
标签: reactjs typescript