Un caso bastante común que estoy tratando de descubrir cómo manejar es la anotación de tipo en objetos json devueltos por alguna API.
La especificación dice:
Aparte de los primitivos, el tipo de tipo más común que encontrará es un tipo de objeto. Esto se refiere a cualquier valor de JavaScript con propiedades, ¡que son casi todas! Para definir un tipo de objeto, simplemente enumeramos sus propiedades y sus tipos. Por ejemplo, aquí hay una función que toma un objeto similar a un punto:
// The parameter's type annotation is an object type function printCoord(pt: { x: number; y: number }) { console.log("The coordinate's x value is " + pt.x); console.log("The coordinate's y value is " + pt.y); } printCoord({ x: 3, y: 7 });Entonces, ¿deberíamos escribir todos los parámetros y objetos anidados? ¿Qué pasa si no sé de antemano el organismo de respuesta? ¿Qué pasa si el cuerpo es muy largo y rico en objetos anidados y conjuntos de objetos?
¿Cuál sería la mejor práctica o las alternativas sensatas en el último caso?
Como ejemplo, Axios le permite especificar el tipo de respuesta al realizar la llamada. Esto es mediante el uso de genéricos mecanografiados . Puedes ver un ejemplo aquí .
Puede generar rápidamente interfaces de mecanografiado pegando su respuesta API en una herramienta como https://app.quicktype.io/?l=ts que convierte su objeto JSON en interfaces de mecanografiado.
Tenga en cuenta que si las respuestas de su API cambian, deberá asegurarse de que sus interfaces manejen todas las variaciones.
Aquí hay otro ejemplo de cómo especificar tipos de devolución usando el método nativo de 'obtención': Cómo usar la búsqueda en TypeScript
No hay mucho que hacer frente a este problema.
Algunas bibliotecas y servicios se han preocupado por empaquetar su cliente (como twilio) para que se escriba. Si ese no es el caso y está programando contra una API (HTTP la mayor parte del tiempo), su primera alternativa es programar muy a la defensiva. Es decir, no dar por sentado que una propiedad determinada estará presente, como si estuviera usando Javascript simple.
Otra alternativa es hacer todo lo posible para tratar de escribir las respuestas que recibe de los servicios externos en función de su documentación. Puedes hacerlo a mano, o (y esto es lo que suelo hacer para evitar errores tipográficos), puedes usar herramientas externas que sean capaces de transformar una respuesta JSON en su tipo correspondiente.