Итак, мой бэкэнд имеет такой JSON
name: "Hello",
nameTranslations: {nl:"Hallo", en: "Hello", fr: "Bonjour"}
description: "Hello",
descriptionTranslations: {nl:"Hallo", en: "Hello", fr: "Bonjour"}
Я хочу создать функцию, в которую я вставлю объект и ключ, и она автоматически найдет наилучший возможный перевод. Это просто в Javascript, но я хочу правильно настроить Typescript, чтобы не сталкиваться с ошибками во время выполнения, если я забыл запросить переводы (я использую GraphQL)
function getText(object, key, language) {
const best = object[`${key}Translations`][language];
if (best) {
return best;
}
return object[key];
}
Некоторые требования Typescript у меня есть
- Мне нужны только возможные ключи объекта ввода
- Я хочу, чтобы Typescript возвращал ошибку, если ключ недоступен для объекта или «keyTranslations»
Обновление Основываясь на ответе @michmich112, я использовал следующую функцию
function translate<T extends BackendTranslations>(translations: T, fallback: string, language: keyof BackendTranslations) => {
return translations[language] || fallback;
}
translate(project.nameTranslations, project.name)
Я оставлю ответ открытым, так как мне все еще интересно, может ли это работать в Typescript