Estoy tratando de usar genéricos recursivos de manera que pueda obtener mucha ayuda del editor.
Aquí hay un ejemplo:
interface ServiceEndpointNode { self: string; context?: Record<string, ServiceEndpointNode> } const ServiceEndpoints: ServiceEndpointNode = { self: 'BASE_URL', context: { songs: { self: 'GET_SONGS', context: { getSong: { self: 'GET_SONG', }, getContributors: { self: 'GET_CONTRIBUTORS', } } } } }Esto funciona correctamente y la estructura es estricta, pero no recibí ayuda del editor. Por ejemplo, quiero ayuda como:
ServiceEndpoints.context.songs.context.getsong.selfPero debido a que solo le dije al tipeo que el contexto debería ser una cadena, realmente no recibo ayuda sobre el objeto transitable. Supongo que necesito incluir algunos genéricos o algo así, pero no sé cómo lograrlo. :(
Así que quiero tener que mantener esta estructura estricta, pero obtener ayuda del editor para todas las posibles rutas, claves, etc.
Ahora puede usar el encadenamiento opcional en TypeScript simplificar como se muestra a continuación. Entonces ese compilador de mecanografiado esperará NULL | subestimado
console.log(ServiceEndpoints.context?.songs.context?.getSong?.self); // OUTPUT: "GET_SONG"