Svelte Derived Store报错:Cannot find name '$t' 求助
问题原因
Svelte里的$前缀是组件专属的语法糖,只有.svelte文件会被Svelte编译器处理,自动把$store转换成订阅store的逻辑。但普通.ts文件没有这个编译过程,TypeScript本身不认识$t这种写法,所以会报“找不到名称”的错误。
解决办法
方法1:用get函数同步获取store值
从svelte/store导入get,直接获取store的当前值:
import { get } from 'svelte/store'; import { t } from './你的store文件路径'; // 先获取翻译函数,再调用 const translate = get(t); const loginText = translate("account.login");
方法2:用subscribe订阅store(适合响应更新的场景)
如果需要监听locale变化自动更新翻译结果,用subscribe方法:
import { t } from './你的store文件路径'; // 订阅store,每次locale变化都会触发回调 const unsubscribe = t.subscribe(translateFn => { const loginText = translateFn("account.login"); // 这里处理翻译后的文本 }); // 不需要监听时记得取消订阅(比如函数结束、组件销毁时) unsubscribe();
方法3:封装工具函数简化调用
如果TS文件里频繁用到翻译,可以封装一个工具函数:
// src/utils/translate.ts import { get } from 'svelte/store'; import { t } from '../stores/你的store文件'; export const translate = (key: string, vars = {}) => { return get(t)(key, vars); };
之后在TS文件里直接导入使用:
import { translate } from './utils/translate'; const loginText = translate("account.login");
内容的提问来源于stack exchange,提问作者qYUUU
相关产品推荐
相关产品推荐

