primera vez que publico una pregunta.
Entonces mi problema es que quiero definir un objeto para almacenar cadenas en diferentes idiomas. Esto debe ser flexible, por lo que lo mejor que se me ocurrió es una estructura de objetos anidados, pero quiero que el último objeto sea de un tipo o interfaz específicos.
Al principio probé:
interface Text { [key: string | number]: ComponentText | Language; } interface Language { [key: string]: string; } text: Text = { title: { en: "English text", sv: "Swedish text", fr: "French Text", es: "Spanish Text", } paragraph: { subText: { en: "English text", sv: "Swedish text", fr: "French Text", es: "Spanish Text", } } } // getCurrLang(s: any) handles getting the correct language string or throws an error when "s" isn't "Language". Pero recibo errores cuando intento getCurrLang(text['paragraph']['subText']) diciendo:
Argument of type 'string | Text | Language' is not assignable to parameter of type 'Text | Language'. Type 'string' is not assignable to type 'Text | Language'.
Se me ocurrió algo que pensé que resolvería el problema, pero a menos que el valor clave pueda contener lo mismo que "idioma", esto no funciona y no resuelve nada:
type LangCode = 'en' | 'sv' | 'fr' | 'es'; interface Text { [key: string]: ComponentText | Array<ComponentText>; language?: Language; } type Language = { [key in LangCode]: string; };¿Hay alguna manera de definir este tipo de estructura o algo mejor?