从标记模板文字函数参数推断类型

我想从标记模板文字函数中的通用参数中获取类型。

但打字稿无法从参数“模板”中读取。它只是将类型读取为 TemplateStringsArray。

const tag = <T extends ReadonlyArray<string>>(template: T, ...args: string[]) => {
  return {template, args};
};

const a = tag`hello ${'world'}`;
/**

const a: {
    template: TemplateStringsArray;
    args: string[];
}
*/

有没有办法理解template['hello ', '']

约塞连船长

这里的主要问题TemplateStringsArray是没有参数化。看到这个问题

但是您仍然可以推断除模板文字函数的第一个参数之外的所有参数:

const tag = <
    Elem extends string,
    Template extends ReadonlyArray<Elem>,
    Arg extends string,
    Args extends Arg[]
>(template: Template, ...args: [...Args]) => ({ template, args })

// const a: {
//     template: TemplateStringsArray;
//     args: ["world", "kiwi"];
// }
const a = tag`hello ${'world'} ${'kiwi'}`;

操场

如果您想推断整个字符串,您应该${}为每个单词使用或使用带有推断字符串参数的常规函数​​。如果你想了解更多关于函数参数的类型推断,你可以看看我的文章

PS 如果您对此功能感兴趣,请点赞 :thumb-up: above issue

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章