typescript - Omitir verificación de tipos en parámetros no utilizados
Cuando compilo mi proyecto de TypeScript, estoy usando la opción noImplicitAny para que no se me olvide especificar los tipos en mis variables y argumentos.
Sin embargo, a veces tienes argumentos que no usas. Por ejemplo:
jQuery.ajaxTransport("+*", function (options: JQueryAjaxSettings) {
return {
abort: function (_, callback: JQueryCallback) {
No me interesa el primer argumento de la función abort, así que lo ignoro nombrándolo _.
¿Es esa la manera correcta de hacer eso en TypeScript? No pude encontrarlo en la guía. Sospecho que no es la manera correcta, porque solo puedo nombrar un argumento _.
Typescript genera el siguiente error:
error TS7006: El parámetro '_' tiene implícitamente un tipo 'any'.
Podría simplemente escribir _:any, pero eso me parece un poco excesivo para un argumento que no uso.
Respuesta #1
Tenía el mismo problema. Al usar say express y el enrutamiento, a menudo solo querrías el parámetro res.
router.get('/', function (req, res) { res.end('Bye.'); });
Tu idea de usar _ funciona aquí, pero también he encontrado que hacer esto funciona.
function (_1, _2, _3, onlyThis) { console.log(onlyThis); }
Esto parece mejor, ya que solo hacer '_', creo que podría hacer que usar lodash/underscore sea un poco confuso, y también hace obvio que es el cuarto parámetro en el que estás interesado.
Actualización: Ha pasado mucho tiempo desde que publiqué esta respuesta, y en los comentarios estoy recibiendo algunas ideas erróneas. Así que pensé en aclararlo.
Usar el truco del guion bajo sigue siendo muy útil en Typescript. Como mencioné en mi respuesta original, por ejemplo, si estabas usando Express y hacías app.get('/', (req, res) => { recibirás una advertencia 'req' está declarado pero su valor nunca se lee, pero si haces -> app.get('/', (_req, res) => { la advertencia desaparecerá. De todos modos, no deberías recibir el error TS7006: El parámetro 'req' tiene implícitamente un tipo 'any', ya que @types/express debería estar tipando este parámetro de manera implícita de todas formas.
Actualización 2,. Por favor, ten en cuenta que la segunda respuesta aquí usando
{}para los parámetros, puede parecer genial, pero es considerablemente más lenta, así que personalmente tendría cuidado al usarla dentro de bucles ajustados.
Respuesta #2
Puede que llegue tarde, pero me quedé atrapado con las otras soluciones y esta siempre funciona para mí:
function ({}={}, {}={}, {}={}, onlyThis) { console.log(onlyThis); }
comparación
Al usar la solución _0, _1, ... me enfrenté a dificultades con funciones extraídas como:
function parent(_0, _1, _2) {
function child(_0, _1, _2) {
// TypeScript crying about shadowed variables
}
}
pero con el objeto vacío funciona bien:
function parent({}, {}, {}) {
function child({}, {}, {}) {
// :-)
}
}
Incluso si los parámetros están escritos así:
function parent({}: number, {}: string, {}: any) {
function child({}: number, {}: string, {}: any) {
// :-) x2
}
}
EDITAR :
Y como se escribe aquí, establecer un valor por defecto evita que se produzca un error si el parámetro dado es undefined o null.
function parent({}={}, {}={}, {}={}) {
function child({}={}, {}={}, {}={}) {
// :-)
}
}
