在Typescript中重新声明解构变量

时间:2019-08-14 20:38:28

标签: typescript

我想在Typescript GraphQL中使用解构。许多API函数使用data作为第一级密钥。如何执行以下操作而不会出现Typescript / TSLint错误。更改为var将导致它希望成为letCannot redeclare block-scoped variable的{​​{1}}。 block-scoped used before its declaration当然是错误的。删除第二个const不会使我破坏第二个let

data

我当前的解决方案是在let {data}:OverlayEventDetail = await modal.onDidDismiss(); if (data.save) { if (shop) { //update } else { const input: CreateShopInput = { name: typeof data.name === 'string' && data.name.length > 0 ? data.name : null, keywords: [] }; let {data}:{data:CreateBlahMutation} = await API.graphql(graphqlOperation(mutations.createShop, {input})); } } 行上同时使用const {data}// @ts-ignore

2 个答案:

答案 0 :(得分:1)

您可以在不声明变量的情况下进行分配。不过,您将需要在语句周围添加括号:

({data} = await API.graphql(graphqlOperation(mutations.createShop, {input})));

答案 1 :(得分:1)

尽管您不能重用该名称,但仍可以在分配给另一个变量的同时进行重构:

let {data: apiData}: {data:CreateBlahMutation} = await API.graphql(graphqlOperation(mutations.createShop, {input}));

这会将data的{​​{1}}属性分配给变量await API.graphql(...)