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

266
Visualizações
¿Tiene mecanografiado azúcar sintáctico para devolver un valor o lanzar una excepción si ese valor no está definido?

Me encuentro con muchas ganas de hacer algo como esto (pseudocódigo):

 const something = somethingElse || throw an error

Esto arrojaría un error si somethingElse más fuera falso. Aquí hay otro ejemplo, escrito en mecanografiado real:

 const accessToken = process.env.ACCESS_TOKEN ?? throw new Error("The environment variable ACCESS_TOKEN was undefined or null");

Esto no se compila porque el lado derecho debe ser una expresión. ¿Hay alguna manera de escribir un código funcionalmente equivalente al anterior mientras es comparable en brevedad?

Puedo hacer lo siguiente, pero me resulta desagradable escribir y ocupa mucho espacio vertical:

 const accessToken = process.env.PATREON_CREATORS_ACCESS_TOKEN; if (accessToken === undefined) { throw new Error("The environment variable PATREON_CREATORS_ACCESS_TOKEN was undefined"); }

También podría crear alguna función de utilidad en la que pase algo potencialmente falso, y si es falso, arroje un error. Pero me pregunto si mecanografiado/javascript proporciona una sintaxis inteligente para lograr esto, por lo que no tengo que crear esa función.

about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

Esto no existe actualmente en TypeScript. En términos generales, TypeScript no adopta características que produzcan resultados de JavaScript a partir de una sintaxis que no sea de JavaScript. (Bueno, ya no hace esto. Algunas funciones más antiguas, como enumeraciones y propiedades de parámetros, definitivamente se comportan de esta manera. Pero si estas funciones aún no existieran, se rechazarían si las sugiriera hoy). Si presenta una nueva solicitud de función , se supone que debe marcar una casilla para confirmar que la sugerencia "no es una función de tiempo de ejecución (por ejemplo, funcionalidad de biblioteca, sintaxis que no es ECMAScript con salida de JavaScript, azúcar de sintaxis nueva para JS, etc.)". De ahora en adelante, si queremos ver nuevas funciones de tiempo de ejecución en TypeScript, deben proponerse a TC39 y TypeScript las implementará una vez que la propuesta llegue a la Etapa 3 del proceso TC39 .

Existe una propuesta existente para " throw expresiones" que ha estado en la Etapa 2 desde algún momento de 2017, por lo que no parece prometedora. También hay un problema de TypeScript GitHub en microsoft/TypeScript#18535 y está atascado con el estado "Esperando TC39". Supongo que no veremos esto pronto.


En la propuesta de expresiones throw , hay una solución alternativa que implementa algo así como una expresión throwable:

 const __throw = (err: any) => { throw err; };

Que puedes ver en acción con tu ejemplo:

 process.env.ACCESS_TOKEN = (Math.random() < 0.5) ? "a token" : undefined; const accessToken = process.env.ACCESS_TOKEN ?? __throw(new Error("The environment variable ACCESS_TOKEN was undefined or null")); // maybe 💥 The environment variable ACCESS_TOKEN was undefined or null // but if it gets here then the compiler knows accessToken is defined: console.log(accessToken.toUpperCase()); // A TOKEN

Así que eso es probablemente lo más cerca que puedes estar por ahora; puede escribir su propia función de utilidad personalizada o conservarse criogénicamente hasta que las expresiones de throw lleguen a la Etapa 3 del proceso TC39.

Enlace del patio de recreo al código

about 4 years ago · Juan Pablo Isaza Relatório

0

Tal vez estoy malinterpretando sus criterios, pero parece bastante fácil de hacer con una función:

Parque infantil TS

 // https://developer.mozilla.org/en-US/docs/Glossary/Falsy type Falsy = false | 0 | -0 | 0n | '' | null | undefined; function truthy <T>(expr: T, msg = ''): Exclude<T, Falsy> { if (!expr) throw new Error(msg); return expr as Exclude<T, Falsy>; } declare const process: { env: Record<string, string | undefined> }; const accessToken = truthy(process.env.ACCESS_TOKEN, 'The environment variable ACCESS_TOKEN was undefined or null');
about 4 years ago · Juan Pablo Isaza 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