我确信这很容易,但我似乎无法找到答案(或者也许问正确的问题!)
我有一个库函数(具体来说,这里的
i18n.translator
:https://primitives.solidjs.community/package/i18n#static-dictionaries),我想用另一个函数包装它以提供一些后备值基于其他逻辑。
const translator = i18n.translator(dict);
const custom_translator = (path, args?): string => {
const translation = translator(path, args);
if (translation) { return translation };
return "Some fallback";
}
如何使
custom_translator
参数与 translator
类型相同? (i18n.translator
对 dict
对象进行一些复杂的类型推断,因此 path
不仅仅是一个字符串!)
有多种方法。人们可以利用 Parameters 实用程序类型,它返回来自
F
的所有参数。所以,你这样写你的函数:
const custom_translator = (...args: Parameters<typeof translator>): string => {
const translation = translator(...args);
if (translation) { return translation };
return "Some fallback";
}
你也可以做这样的事情(但它的可维护性较差):
const custom_translator = (path: Parameters<typeof translator>[0], args?: Parameters<typeof translator>[1]): string => {
const translation = translator(...args);
if (translation) { return translation };
return "Some fallback";
}
另一种方法,如果你想完全复制接口,请将
translator
的类型分配给你的变量,但如果你这样做,你的返回类型也会像 translator
那样,我不认为你想要这个。