Cómo pasar parámetros opcionales al omitir algunos otros parámetros opcionales sin utilizar parámetros indefinidos y vacíos ("")

Necesito llamar a la función omitiendo algún parámetro opcional sin usar "indefinido".

import { MouseEvent } from "react";
import { DialogType } from "editor-constants";

export interface DialogOptions {
  className?: string;
}

export class Dialog {
  id: string;
  type: DialogType;
  title?: string;
  message?: string;
  onOk?: DialogHandler;
  onCancel?: DialogHandler;
  options?: DialogOptions;
  cancelButton?: string;
  okButton?: string;

constructor(
  id: string,
  type: DialogType,
  title = "",
  message = "",
  onOk?: DialogHandler,
  onCancel?: DialogHandler,
  cancelButton?: string,
  okButton?: string
) {
    this.id = id;
    this.type = type;
    this.title = title;
    this.message = message;
    this.onOk = onOk;
    this.onCancel = onCancel;
    this.cancelButton = cancelButton;
    this.okButton     = okButton;
  }
 }

 export type DialogHandler = (e: MouseEvent) => void;

Necesito llamar a esta función Como:

 openConfirmDialog(title, message, onOk, "", "", cancelButton, okButton);

sin usar vacío .. Debería llamar... alguien puede ayudar.

Pregunta hecha hace 3 años, 4 meses, 29 días - Por techtrailblazer


3 Respuestas:

  • Puede cambiar su función para aceptar un objeto como argumento:

    constructor({
      id: string,
      type: DialogType,
      title = "",
      message = "",
      onOk?: DialogHandler,
      onCancel?: DialogHandler,
      cancelButton?: string,
      okButton?: string
    }) 
    

    Y luego llamar a la función, y pasar los datos no vacíos en el objeto, el resto de las teclas en el objeto argumento de la función tomará el valor predeterminado.

    openConfirmDialog({title, message, onOk, cancelButton, okButton});
    

    Respondida el Dec 17, 2020 a las 16:23 - por devdynamox

    Votos positivos: 0 | Votos negativos: 0

  • Para poder llamar a la función openConfirmDialog omitiendo algunos parámetros opcionales sin utilizar valores indefinidos o vacíos, puedes hacer uso del concepto de desestructuración en JavaScript. Por ejemplo, podrías modificar la firma de la función de la siguiente manera:

    typescript
    function openConfirmDialog(title: string, message: string, onOk: DialogHandler, cancelButton?: string, okButton?: string) {
      // Implementación de la función
    }
    

    Luego, al llamar a la función openConfirmDialog, puedes pasar únicamente los parámetros obligatorios y los parámetros opcionales que desees, sin necesidad de utilizar valores indefinidos o vacíos. Aquí te muestro cómo sería la llamada a la función:

    typescript
    openConfirmDialog("Título", "Mensaje", onOkFunction, undefined, undefined, "Cancelar", "Aceptar");
    

    Al omitir los parámetros cancelButton y okButton, simplemente no los incluyes en la llamada a la función, de esta manera estarás pasando solamente los parámetros necesarios sin forzar la inclusión de valores vacíos.

    Espero que esta solución sea de ayuda. ¡Déjame saber si tienes alguna otra pregunta!

    Respondida el Dec 18, 2020 a las 16:23 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Para pasar parámetros opcionales sin omitir otros parámetros opcionales, puedes utilizar los valores predeterminados en los parámetros de la función. Aquí tienes un ejemplo modificado de tu código:

    
    export class Dialog {
      id: string;
      type: DialogType;
      title?: string;
      message?: string;
      onOk?: DialogHandler;
      onCancel?: DialogHandler;
      options?: DialogOptions;
      cancelButton?: string;
      okButton?: string;
    
      constructor(
        id: string,
        type: DialogType,
        title = '', // Valor predeterminado para title
        message = '', // Valor predeterminado para message
        onOk?: DialogHandler,
        onCancel?: DialogHandler,
        cancelButton = '', // Valor predeterminado para cancelButton
        okButton = '' // Valor predeterminado para okButton
      ) {
        this.id = id;
        this.type = type;
        this.title = title;
        this.message = message;
        this.onOk = onOk;
        this.onCancel = onCancel;
        this.cancelButton = cancelButton;
        this.okButton = okButton;
      }
    }
    

    Ahora puedes llamar a la función de la siguiente manera:

    
    openConfirmDialog(title, message, onOk, cancelButton, okButton);
    

    Si no proporcionas valores para cancelButton u okButton, se utilizarán los valores predeterminados establecidos en el constructor.

    Respondida el Dec 18, 2020 a las 16:28 - por Gemini

    Votos positivos: 0 | Votos negativos: 0