es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo definir un registro con una unión como claves pero también tener claves opcionales?

Este es mi diccionario:

type Words = 'man' | 'sun' | 'person'
type Dictionary = Record<words, string="">

Y Dictionary es igual a este tipo:

type Dictionary = {
    man: string;
    sun: string;
    person: string;
}

El objetivo es que otros programadores sepan qué palabras deben agregarse al diccionario utilizando el autocompletado del IDE. Pero esto les restringe la opción de agregar otras palabras opcionales. Intenté esto pero el resultado no incluye palabras en absoluto:

type Words = 'man' | 'sun' | 'person' | string
type Dictionary = Record<words, string="">
// Igual a
type Dictionary = {
    [x: string]: string;
}

¿Cómo puedo tener autocompletado con palabras pero también puedo tener palabras opcionales?</words,></words,>

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para tener autocompletado con las palabras permitidas y también permitir palabras opcionales, puedes modificar el tipo Dictionary de esta manera:

    type Words = 'man' | 'sun' | 'person';
    type OptionalWords = string;
    type Dictionary = Record<words, string=""> & Partial<><optionalwords, string="">>;
    
    // Ejemplo de uso
    const dict: Dictionary = {
      man: 'un hombre adulto masculino',
      sun: 'la estrella alrededor de la cual orbita la tierra',
      person: 'un ser humano',
      newWord: 'esta es una palabra opcional',
    };
    

    Al usar el operador de intersección (&) y el tipo de utilidad Partial, podemos extender el tipo Dictionary para permitir palabras opcionales. El tipo Partial hace que todas las propiedades sean opcionales, por lo que puede aparecer cualquier clave de cadena, mientras que Record<words, string=""> asegura que solo las palabras permitidas tendrán valores definidos.

    De esta manera, obtendrás autocompletado para las palabras permitidas y aún permitirás que se agreguen palabras opcionales al diccionario.</words,></optionalwords,></words,>

Comments are closed.