Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

259
Vistas
¿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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda