Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

194
Visualizações
Cómo hacer que TypeScript sepa que mi variable ya no está indefinida

Aquí está mi caso:

Estoy usando un cargador Remix que obtiene parámetros de la URL pero los parámetros se definen como string | undefined

Si la variable no está undefined , me gustaría lanzar una redirección

 export const loader: LoaderFunction = async ({ params }) => { const { myVar } = params; // myVar: string | undefined definedOrRedirect(myVar, "/"); // Checks if undefined return fetchSomething(myVar); // myVar: string | undefined };

¿Hay alguna manera de hacer que TypeScript sepa que si no arrojó myVar no está indefinido?

over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

Puede hacer que throwIfUndefined sea una función de aserción para restringir el tipo de su argumento a algo que no incluya undefined en su dominio. Una función de aserción tiene un predicado de tipo de aserción de la forma asserts x is Y como su tipo de devolución, donde x es el nombre de uno de los parámetros de la función, e Y es el subtipo del tipo de typeof X al que limitamos x asumiendo que la función devuelve correctamente . Las funciones de aserción no pueden devolver un valor definido; son básicamente funciones de retorno de void .

Para throwIfUndefined , esta es la forma normal de hacerlo, como una declaración de función:

 function throwIfUndefined<T>(x: T | undefined): asserts x is T { if (typeof x === "undefined") throw new Error("OH NOEZ"); }

También puede escribirlo como una función de flecha, aunque necesita anotar explícitamente la variable con su tipo para que el análisis de flujo de control se realice correctamente:

 const throwIfUndefined: <T, >(x: T | undefined) => asserts x is T = x => { if (typeof x === "undefined") throw new Error("OH NOEZ"); }

De cualquier manera debería funcionar:

 const Index = ({ params }: { params: { myVar: string | undefined } }) => { const { myVar } = params // myVar: string | undefined // myVar.toUpperCase // <-- error, Object is possibly 'undefined' throwIfUndefined(myVar); return myVar.toUpperCase() // no error now } try { console.log(Index({ params: { myVar: Math.random() < 0.5 ? "hello" : undefined } })) // 50% "HELLO" } catch (e) { console.log(e); // 50% "OH NOEZ" }

Enlace del patio de recreo al código

over 4 years ago · Santiago Trujillo Relatório

0

Puede omitir la definición o la definedOrRedirect y usar una verificación explícita:

 export const loader: LoaderFunction = async ({ params }) => { const { myVar } = params; // myVar: string | undefined if (myVar == undefined) { return redirect("/"); } return fetchSomething(myVar); // myVar: string }

O puede mantener definedOrRedirect y declararlo con una afirmación como sugiere jcalz :

 function definedOrRedirect(variable, path): asserts variable is string { if (variable == undefined) { return redirect(path); } } export const loader: LoaderFunction = async ({ params }) => { const { myVar } = params; // myVar: string | undefined definedOrRedirect(myVar, "/"); return fetchSomething(myVar); // myVar: string }
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda