如何将动态对象数组的类型声明为反应状态?

时间:2020-05-12 18:20:16

标签: reactjs typescript

我需要声明一个对象数组,但是与StackOverflow上的其他答案不同,我的对象在运行时是动态的。

示例

可能 [{“ id”:“ 1”,“ random1”:“ 1”,“ random1”:“ 1”,“ random1”:“ 1”}]

可能 [{“ id”:“ 2”,“ p”:“ p2”,“ p2”:“ o2”}]

我有数据:{} [],但是我应该放在哪里?

const [data, setData] = useState({ data: {}[], isFetching: false });

或者我可以这样定义的方式:我可以说总是有一个id:字符串索引,而其余的可以是任何。

像这样的东西,这是无效的,但也许像这样的东西?

const [data, setData] = useState({ data: { [index: string]: any }[];, isFetching: false });

1 个答案:

答案 0 :(得分:1)

您可以声明一个辅助类型,以指定动态结构并保持代码干净:

type Data = {
  data: { [index: string]: any }[];
  isFetching: boolean;
}
// ...
useState<Data>({ data: [], isFetching: false });
// or
useState({ data: [], isFetching: false } as Data);

鉴于它是React,没有什么可以阻止您进入两种状态(但我想您不喜欢给出的实际代码),例如:

const [isFetching, setIsFetching] = useState(false);
const [data, setData] = useState([] as ({ [index: string]: any }[]));