HISTÓRIA (sinta-se à vontade para pular para o problema)
Estou tentando desestruturar uma resposta de um Apollo useLazyQuery
e depois alterar uma variável. Sem o Typescript, seriam duas linhas simples:
let [someFunction, { data, loading }] = useLazyQuery(QUERY);
data = 'whatever'
No entanto, isso ofende o Typescript, porque estou criando todas as variáveis let
, embora a maioria não mude. Então, mudei o código para desestruturar a maior parte da resposta como constante, com uma única exceção:
const stuff = useLazyQuery(QUERY);
let [_, { data }] = stuff; // get one variable as a non-constant
const [someFunction, { loading }] = stuff; // get the rest as constants
O problema é que ainda estou recebendo erros/avisos do TypeScript:
O aviso 77:8 '_' recebeu um valor, mas nunca foi usado no-unused-vars
O erro 77:8 '_' nunca é reatribuído. Use 'const' em vez de prefer-const
Claro, _
é apenas um espaço reservado para me ajudar a desestruturar data
, então não deveria ser reatribuído... mas é necessário na let
linha para fazer a desestruturação funcionar.
PROBLEMA
Eu teria pensado que poderia dizer ao Typescript "não se preocupe _
, apenas ignore" adicionando um @ts-ignore
comentário:
const stuff = useLazyQuery(QUERY);
// @ts-ignore
let [_, { data }] = stuff; // get one variable as a non-constant
const [someFunction, { loading }] = stuff; // get the rest as constants
Mas tudo o que isso faz é adicionar um novo aviso sobre como devo usar @ts-expect-error
em vez de @ts-ignore
... isso não elimina o aviso/erro sobre minha _
variável.
PERGUNTAS (duas relacionadas)
Achei que
@ts-ignore
ignorei todos os avisos/erros na próxima linha; alguém pode explicar como o Typescript decide quais avisos/erros@ts-ignore
realmente ignoram e quais não?Alguém pode explicar como posso fazer o Typescript parar de reclamar de
'_' is never reassigned. Use 'const' instead
erros (de uso@ts-ignore
ou qualquer outra coisa)... sem abrir mão de recursos básicos da linguagem, como desestruturação?
Para esclarecimento: os erros acima vêm do es-lint e não do próprio TS. Você precisará desabilitar isso.
Você pode usar:
ou