You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让自定义包装函数与i18n.translator参数类型一致?

问题:如何让自定义翻译函数的参数类型与SolidJS i18n的translator完全一致?

我希望包装SolidJS社区i18n工具中的i18n.translator函数,添加基于自定义逻辑的fallback值。现有代码如下:

const translator = i18n.translator(dict);

const custom_translator = (path, args?): string => {
    const translation = translator(path, args);
    if (translation) { return translation };
    return "Some fallback";
}

由于i18n.translator会对dict对象进行复杂类型推断,path并非普通string类型,请问如何让custom_translator的参数类型与translator完全一致?


解决方案

你可以通过TypeScript的类型工具直接复用原translator函数的类型定义,具体有两种简洁的实现方式:

方式1:直接继承原函数类型

直接将自定义函数的类型指定为typeof translator,就能完全继承原函数的参数类型约束和返回类型:

const translator = i18n.translator(dict);

const custom_translator: typeof translator = (path, args) => {
  const translation = translator(path, args);
  // 使用空值合并运算符简化fallback逻辑
  return translation ?? "Some fallback";
};

方式2:用类型工具提取参数和返回类型

如果需要更明确地拆解类型,可以使用Parameters和ReturnType工具类型分别提取原函数的参数列表和返回类型:

const translator = i18n.translator(dict);

// 提取translator的参数类型
type TranslatorParams = Parameters<typeof translator>;
// 提取translator的返回类型
type TranslatorReturn = ReturnType<typeof translator>;

const custom_translator = (...[path, args]: TranslatorParams): TranslatorReturn => {
  const translation = translator(path, args);
  return translation ?? "Some fallback";
};

这两种方式都能确保custom_translator的path参数继承原translator基于dict推断出的精确类型,同时保留TypeScript的类型检查能力,避免手动定义类型带来的误差。


内容的提问来源于stack exchange,提问作者oculardexterity

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 05:25:06