reactjs - 如何创建一个包含由另一个接口定义的对象数组的接口?
问题描述
在类组件中,我试图通过定义一个包含由另一个接口定义的对象数组的接口来正确键入状态对象。
当我访问 state 属性时,它的类型为never[]
?
interface OrdersProps extends RouteComponentProps<any>, React.Props<any> { }
interface OrderType {
ingredients: { [index: string]: number },
totalPrice : number
}
type OrdersType = OrderType[]
interface OrdersState {
// orders: { ingredients: {[index: string]: number}, totalPrice: number}[] <- not working
// orders: Array<OrderType> // <- not working
orders: OrdersType // <- not working
}
class Orders extends React.Component<OrdersProps, OrdersState> {
state = {
orders: []
}
render() {
const orders = this.state.orders // <- orders of type `never[]` ??
return (
<div>
...
</div>
)
}
componentDidMount() {
// fetch data and set state
}
}
export default Orders
解决方案
这是 TypeScript 看到state
使用包含空订单数组的对象初始化的结果,该数组已never
填充。(在非严格模式下,我相信它会导致any[]
而不是never[]
.
如果你告诉 TypeScript 你更了解类型断言,你会发现never[]
问题消失了……所以只要某处某处填充了该数组,你就可以正确地告诉它。
state = {
orders: []
} as OrdersState;
推荐阅读
- javascript - 将样式化组件作为子组件传递给另一个组件会引发错误
- c++ - 为什么 rand 没有在我的代码中产生随机数?
- swift - 如何在不加载缓冲区的情况下在 AVaudioPlayer 中播放 MP3 url
- r - R中因素之间的Spearman等级相关性
- macos - 将 Cocoa 与 AppleScript 一起使用
- php - PHP数组输出修改
- flutter - 从外部文件更新小部件
- javascript - 在页脚中编辑版权功能
- sql - Informix SQL SELECT 多行结果 - 如何在一行中呈现?
- r - 如何使用 dplyr 汇总过滤数据集中所有列的总和?