No estoy seguro de haber formulado correctamente el título de la pregunta: estoy trabajando en componentes de reacción en una biblioteca que tiene un determinado conjunto de valores predefinidos para algunas de las propiedades. Pero según el uso, se deben agregar valores adicionales a la interfaz. Esto funciona bien hasta ahora:
export interface CompProps<Variant = string> { variant?: 'banana' | 'strawberry' | Variant; } Sin embargo, me di cuenta de que, al trabajar con el componente, ahora aceptará cualquier cadena para la propiedad de la variant y el IDE tampoco sugerirá estos valores predefinidos en determinadas circunstancias.
¿Cuál es la forma correcta de hacer esto?
Tal vez podría aprovechar el parámetro de tipo predeterminado para escribir la propiedad de la variant con más fuerza, ya que actualmente es 'banana' | 'strawberry' | string por defecto.
Si establece el parámetro predeterminado en never en su lugar, podría evitar la unión con la string general, haciendo que la variant sea 'plátano' o 'fresa', lo que debería dar al IDE una pista más sólida sobre el valor deseado. Aquí también agregué una restricción de modo que la variante sea una cadena, que supongo que es lo que desea.
Si uno tuviera que establecer el parámetro de tipo Variant , podrían indicar explícitamente qué cadenas esperan pasar de esta manera:
export interface CompProps<Variant extends string = never> { variant?: 'banana' | 'strawberry' | Variant; } const test: CompProps<'chocolate'> = {variant: 'chocolate'};Sin embargo, con esta solución, el componente aún tendrá que acomodar el tipo más general (es decir, CompProps), por lo que probablemente no será muy beneficioso si los valores predefinidos deben ser evidentes dentro del componente.