depuración - Creando una función de TypeScript que puede ser una operación nula
Quiero crear una función TRAP donde, en modo de depuración, sea la llamada "debugger;" y en modo de lanzamiento no haga nada, preferiblemente sin siquiera una llamada/retorno.
He ideado:
// declare it
var trap = function () { debugger; }
// ...
// use it
trap();
Y luego, para el modo de lanzamiento es:
var trap = function () { }
Entonces, la pregunta n.º 1 es, ¿es esta la mejor manera de hacer esto?
Y la pregunta #2 es, ¿hay alguna manera de hacer un tipo de pragmas "#if DEBUG, #else, #endif" alrededor de esto, o necesitamos cambiarlo a mano cuando construimos para producción?
Respuesta #1
No estoy seguro de cómo defines exactamente el modo "debug", pero si el modo debug es más que solo los scripts que se compilan, generalmente solo condicionalizaría la función como lo has hecho (he trabajado en varias aplicaciones de JavaScript, por ejemplo, donde hemos tenido un modo "debug" incluso cuando los scripts minificados se lanzaban para ayudar con problemas de clientes en producción... se activaba ya sea mediante una cookie o una cadena de consulta):
// this would be set for example to true when
// in debug mode
export var isDebugModeActive: boolean = false;
export var trap = () => {
debugger;
};
if (isDebugModeActive) {
// since you may not want to conditionalize
// through a #PRAGMA like system every call to
// trap, this just no-ops the function
trap = () => {};
}
// or
trap = () => {
// checking a boolean is going to be
// really fast ... :)
if (isDebugModeActive) {
debugger;
}
}
Tener un modo "debug" funciona bien cuando quieres, de manera poco frecuente, pero a veces mostrar información adicional en el registro de la consola del navegador, por ejemplo.
Respuesta #2
Encontré esta página buscando. Por si otros también lo hacen. Esto es lo que estaba buscando.
type Noop = () => void;
// tslint:disable-next-line:no-empty
const noop: Noop = () => {};
Uso de ejemplo:
const onPress = (buttons && buttons[0].onPress) || noop;
