如何解决带有打字稿的递归类型
我想创建一个类型,它是一个包含字符串的对象或一个包含字符串或对象的对象,...
所以我所做的是创建一个这样的类型:
type TranslationObject = { [key: string]: string | TranslationObject };
但是当在 reduce 中使用它时,这就是它导致错误的地方
Object.keys(newTranslations).reduce((acc: TranslationObject,translationKey: string): TranslationObject => {
return {
...acc,[translationKey]: {
...acc[translationKey] as TranslationObject,[namespace]: {
...(acc[translationKey][namespace] as TranslationObject),// Error at this line
...newTranslations
}
}
}
},translations);
错误是
TS7053: Element implicitly has an 'any' type because expression of type 'string' can't be used to index type 'string | TranslationObject'. No index signature with a parameter of type 'string' was found on type 'string | TranslationObject'.
所以我的类型要么是一个字符串,要么是一个对象,但在那种情况下,我希望它是对象部分,但我真的无法弄清楚。
解决方法
您需要在 acc[translationKey] 之后添加为 TranslationObject,因为您无法尝试从字符串中获取密钥。
Object.keys(newTranslations).reduce((acc: TranslationObject,translationKey: string): TranslationObject => {
return {
...acc,[translationKey]: {
...acc[translationKey] as TranslationObject,[namespace]: {
...((acc[translationKey] as TranslationObject)[namespace] as TranslationObject),...newTranslations
}
}
}
},translations);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。