typescript - 使用来自其他文件的枚举覆盖 i18next TFunction
问题描述
我想要实现的是确保将使用的 i18n 键键入为:
t('invalid-key') // is invalid
t('key1') // is valid
所以我制作了以下i18next.d.ts
文件来覆盖TFunction的类型:
type Keys = 'key1' | 'key2'
declare module 'i18next' {
export type TFunction = (key: Keys) => string
}
它可以工作,但是一旦我尝试从其他文件导入该类型,TFunction 类型就会恢复为原始类型。
有人提示帮助我在声明文件中导入密钥吗?
当我通过react-i18next包的useTranslation钩子进行导入时,奇怪的导入工作:
import { I18nKey } from '../modules/core/i18n/i18nKey'
declare module 'react-i18next' {
export function useTranslation(): {
t: (key: I18nKey) => string
}
}
解决方案
如果Keys
在声明文件中导出,则声明文件将成为一个模块。这会导致 TypeScript 不全局包含该文件。declare module
为全局创建一个单独的文件。
如果你想导入一个声明模块的全局文件,你应该像这样在模块中导入它们。
declare module 'react-i18next' {
import { I18nKey } from '../modules/core/i18n/i18nKey'
export function useTranslation(): {
t: (key: I18nKey) => string
}
}
推荐阅读
- go - 切换多种类型的案例,如何设置案例以捕获来自某个导入的所有错误
- r - R Plotly - add_trace 按组对值求和
- bash - 对于 excel 调用 shellscript 中的每个 Raw
- ktor - 如何使用 ktor 在每个子文件夹下提供静态默认内容
- json - 从 Firestore 获取子集合的 JSON 响应
- layout - 将 blazor RenderFragment 模板化到页面或组件中的布局
- c# - Microsoft Graph 异常:必须使用服务操作生成新密码凭据
- c# - 服务器升级后 C# 服务无法连接到 Web 服务
- java - 如何从 TimeZone 获得偏移量
- node.js - 为什么在我的本地存储库的所有目录中都创建了一个 dist 文件夹