React Native项目中i18n-js遇TypeScript报错:Property 't'不存在
解决React Native + TypeScript中i18n-js的
t方法类型错误问题 1. 检查i18n实例的导出方式
确保你在i18n.js(建议改为i18n.ts适配TS项目)中导出的是配置后的i18n实例本身,而非模块整体。示例代码:
// i18n.ts import i18n from 'i18n-js'; import en from './locales/en.json'; import es from './locales/es.json'; i18n.translations = { en, es }; i18n.defaultLocale = 'en'; i18n.locale = 'en'; i18n.fallbacks = true; // 导出配置好的实例 export default i18n;
如果之前用export { i18n },则导入时要对应使用import { i18n } from './i18n',保证拿到的是已配置的实例,而非未初始化的模块类型。
2. 为翻译文件添加类型声明
TypeScript无法自动识别JSON翻译文件的结构,需要手动定义或自动生成类型:
方法一:手动定义翻译类型
在项目的types/i18n.d.ts文件中添加:
import 'i18n-js'; declare module 'i18n-js' { interface Translations { login: { accountCreatedTitle: string; // 补充其他login模块的翻译键 }; // 补充其他翻译模块的结构 } }
这样TS就能识别t方法的合法参数,同时正确推断i18n实例的类型。
方法二:自动生成类型(更高效)
先安装@types/i18n-js依赖:
npm install @types/i18n-js --save-dev
然后在tsconfig.json中开启JSON模块解析:
{ "compilerOptions": { "resolveJsonModule": true, "esModuleInterop": true, // 其他原有配置 } }
3. 确认导入路径正确性
检查Auth.tsx的导入语句,确保指向自己配置的i18n.ts/i18n.js文件,而非i18n-js库本身:
// 正确:导入自定义配置的实例 import i18n from '../path/to/i18n'; // 错误:直接导入未配置的库模块 import i18n from 'i18n-js';
4. 重启TypeScript服务
TS缓存可能导致类型不更新,按Ctrl+Shift+P(Windows/macOS),输入TypeScript: Restart TS Server重启服务,或重新编译项目让类型声明生效。
内容的提问来源于stack exchange,提问作者FabioDev
相关产品推荐
相关产品推荐

