Dada la siguiente firma:
export interface INotificationService {
error(message: string, title?: string, autoHideAfter?: number);
}
¿Cómo puedo llamar a la función error()
no especificando el title
parámetro, sino configurando autoHideAfter
para decir 1000
?
typescript
g.pickardou
fuente
fuente
?
se agrega en la definición de la función , pero la pregunta es acerca de llamar realmente a la función.undefined
para obtener el mismo comportamiento que omitir por completo el argumento. Simplemente "cualquier cosa que no sea verdadera" no funcionará, porque TypeScript en realidad se compara convoid 0
cuál es una forma más segura de escribirundefined
. )Lamentablemente, no hay nada como esto en TypeScript (más detalles aquí: https://github.com/Microsoft/TypeScript/issues/467 )
Pero para evitar esto, puede cambiar sus parámetros para que sean una interfaz:
fuente
puede usar una variable opcional por
?
o si tiene varias variables opcionales por...
, por ejemplo:En lo anterior:
name
es requeridocountry
es obligatorio y tiene un valor predeterminadoaddress
es opcionalhobbies
es una serie de parámetros opcionalesfuente
Otro enfoque es:
Entonces, cuando desee omitir el parámetro de título, simplemente envíe los datos así:
Prefiero estas opciones porque me permite agregar más parámetros sin tener que enviar los demás.
fuente
title
?Esto es casi lo mismo que la respuesta de @Brocco, pero con un ligero giro: solo pasa parámetros opcionales en un objeto. (Y también hacer que los parámetros sean opcionales).
Termina siendo como los ** kwargs de Python, pero no exactamente.
fuente
Puede especificar múltiples firmas de métodos en la interfaz y luego tener múltiples sobrecargas de métodos en el método de clase:
Ahora todo esto funcionará:
... y el
error
método deINotificationService
tendrá las siguientes opciones:Patio de recreo
fuente
Puede crear un método auxiliar que acepte una base de parámetros de un objeto en argumentos de error
fuente
Puede intentar establecer el título en nulo.
Esto funcionó para mí.
fuente
Puede hacer esto sin una interfaz.
use el
?
operador como parámetro opcional.fuente
message
yautoHideAfter