Tengo un objeto que tiene un constructor con un parámetro opcional como este:
class example{ constructor(a: string,b: string,c: string,d?:string){ //... } }Esta clase se instanciará dentro de otro método. Como esto:
function createExample(a: string,b: string,c: string,d?:string){ return new example(a,b,c,d) }Pero solo quiero pasar el parámetro "d" si se recibió la función createExample(). ¿Hay alguna manera en javascript/mecanografiado para hacer esto? Algo como:
Quiero pasar el parámetro d solo si existe, y espero no tener que hacer un if que verifique esto, porque si tengo más parámetros opcionales se puede complicar. ¿Hay alguna manera en javascript/mecanografiado para hacer esto? Algo como:
function createExample(a: string,b: string,c: string,d?:string){ return new example(a,b,c,d?) }¿O debería dejar la instancia con el parámetro "d" normal y, en caso de que no esté definido, debería pasarse como indefinido?
Si define el tipo para D como potencialmente indefinido, simplemente puede pasarlo
class Example { constructor(a: string, b: string, c: string, d?: string) { // ... } } const A = ""; const B = ""; const C = ""; let D: string | undefined; if (someCondition) { D = "d"; } const ex = new Example(A, B, C, D);¿O debería dejar la instancia con el parámetro "d" normal y, en caso de que no esté definido, debería pasarse como indefinido?
Sí, exactamente esto. JavaScript trata los argumentos faltantes y los undefined que se pasan como un argumento del mismo 1 : ambos terminan con un parámetro undefined o predeterminado. Así que es tan simple como
function createExample(a: string, b: string, c: string, d?: string) { return new Example(a, b, c, d); }Si realmente te importa, puedes usar la sintaxis extendida con una matriz:
function createExample(...args: [a: string, b: string, c: string, d?: string]) { return new Example(...args); } 1: excepto para la sintaxis de parámetros arguments.length y rest