Tengo la situación en la que tengo una entidad de dominio que puede estar en un estado "recién nacido" y luego en un estado más maduro, una vez que se obtienen más datos de un tercero.
Un ejemplo sencillo sería:
interface Props { name: string; idFrom3pAPI?: string; }Cuando llega una solicitud a mi sistema, me gustaría crear el objeto de dominio, pero faltarán algunos datos, luego pasaré este objeto a un servicio/repositorio que obtendrá las claves faltantes y devolverá el objeto completo.
El problema con el tipo anterior es que cuando trato de pasar este objeto al ORM, no se verificará el tipo ya que idFrom3pAPI no puede estar indefinido.
Básicamente, estoy buscando un tipo de unión condicional o discriminado, donde pueda establecer una bandera en el estado de los objetos, y el verificador de tipos estaría feliz de tener ahora los datos correctos.
¡Cualquier ayuda apreciada!
Es posible que no esté leyendo su pregunta correctamente, sin embargo, estoy de acuerdo con su intento inicial donde idFrom3pAPI es opcional si de hecho puede existir o no. Sin embargo, si su ORM no puede aceptar que idFrom3pAPI sea opcional, entonces esta solución debería funcionar.
Primero, elimine el opcional de idFrom3API
interface Props { name: string; idFrom3pAPI: string; } Luego puede usar el tipo de utilidad Partial cuando lo pasa al "servicio/repositorio" y ese "servicio/repositorio" devolvería el tipo completo. El "servicio/repositorio" debe aceptar Partial y devolver Props . La variable que recibe la solicitud inicial sería Partial<Props> y una nueva variable de tipo Props recibiría el resultado de su "servicio/repo"
Entonces su ORM puede aceptar Props como se definió anteriormente sin el opcional.
Otra opción sería crear un tipo diferente y luego restringirlo al tipo que quiere el ORM.