以下为ChatGPT自动生成的解答,正确与否请自行判断。 也许你也可以从大家的发帖中找到想要的答案!
BFE.devAI解答 - TypeScript 类型谜题
44. implement ReplaceAll<S, F, T>
type ReplaceAll<S extends string, F extends string, T extends string> = F extends '' ? S // 如果 F 为空字符串,则返回原始字符串 : S extends `${infer L}${F}${infer R}` // 使用 infer 关键字匹配字符串 ? `${ReplaceAll<L, F, T>}${T}${ReplaceAll<R, F, T>}` // 递归调用 ReplaceAll 替换 : S; // 没有匹配到则返回原始字符串// 测试用例type A = ReplaceAll<'aba', 'b', ''> // 'aa'type B = ReplaceAll<'ababbab', 'b', ''> // 'aaa'
解释:首先判断 F 是否为空字符串,如果是,则不做处理直接返回字符串 S。如果 F 不为空,则使用 infer
匹配 S 中的 L(左边字符串)、R(右边字符串)以及 F(需要替换的字符串)。如果找到 F,则递归调用 ReplaceAll
替换 L 和 R 中的 F,将 T 代替 F 并拼接起来;如果没有找到 F,则返回原始字符串 S。