【发布时间】:2020-12-18 18:52:50
【问题描述】:
所以我的后端有一个这样的 JSON
name: "Hello",
nameTranslations: {nl:"Hallo", en: "Hello", fr: "Bonjour"}
description: "Hello",
descriptionTranslations: {nl:"Hallo", en: "Hello", fr: "Bonjour"}
我想构建一个函数,我将在其中放入对象和键,它会自动找到可能的最佳翻译。在 Javascript 中很容易,但我想正确使用 Typescript,所以如果我忘记查询翻译(我使用 GraphQL),我不会处理运行时错误(我使用 GraphQL)
function getText(object, key, language) {
const best = object[`${key}Translations`][language];
if (best) {
return best;
}
return object[key];
}
我有一些 Typescript 要求
- 我只想要输入对象的可能键
- 如果对象或“keyTranslations”上的键不可用,我希望 Typescript 返回错误
更新
根据@michmich112 的回答,我确实使用了以下功能
function translate<T extends BackendTranslations>(translations: T, fallback: string, language: keyof BackendTranslations) => {
return translations[language] || fallback;
}
translate(project.nameTranslations, project.name)
我将保持答案开放,因为我仍然对这是否可以在 Typescript 中工作感兴趣
【问题讨论】:
-
@michmich 的回答有什么问题?
-
他的建议确实解决了我的问题,但没有回答问题,如果原始函数可以是类型安全的并且也符合我的要求,我仍然感兴趣
标签: typescript template-literals