Entonces, tengo una API que toma un objeto de opciones, algo como esto:
type Options = { pos: number }; function doTheThing(options: Options) { }Ahora, si llamo a esto con cualquiera de los siguientes, aparece un bonito mensaje de error:
doTheThing(); // requires another argument. doTheThing({ something: 20 }); // missing property "pos"Excelente. Pero si paso un objeto vacío, Flow lo considerará "sin sellar" y, por lo tanto, no tendrá ningún problema con él:
doTheThing({ }); // No error, would like it to say "pos" missing instead.Entonces, traté de hacerlo exacto:
type Options = {| pos: number |};Ahora, me sale un error, pero no es muy agradable:
doTheThing({ }); // Cannot call `doTheThing` with object literal bound to `options` because inexact object literal [1] is incompatible with exact `Options` [2]. Pero solo quiero que diga que falta "pos". Lo anterior es más complicado y solo te obliga a tener que leer la definición de Options para saber lo que se necesita. Quiero que le ofrezca la propiedad real que falta. Lo cual hará, tan pronto como ponga algo al azar allí:
doTheThing({ x: 10 }); // Cannot call `doTheThing` with object literal bound to `options` because property `pos` is missing in object literal [1] but exists in `Options` ¿Hay alguna forma de que me dé ese mensaje de error en {} , en lugar del mensaje menos útil? Idealmente, a través de algún tipo de anotación adicional en el tipo y no alguna configuración de flujo global que apague los objetos no sellados o algo así.