Yuzhe's Blog

yuzhes

ReplaceAll

TODO

题目链接

题目

实现 ReplaceAll<S, From, To> 将一个字符串 S 中的所有子字符串 From 替换为 To

例如

type replaced = ReplaceAll<'t y p e s', ' ', ''> // 期望是 'types'

解答

type ReplaceAll<S extends string, From extends string, To extends string> = 
From extends ''
  ? S
    : S extends `${infer Head}${From}${infer Tail}`
    ? `${Head}${To}${ReplaceAll<Tail, From, To>}` //只替换剩下部分, 防止前面重新构成的匹配影响结果
  : S

注意: 如果替换入的To构成了新的From, 则不应该替换.

比如替换aaaaaa中的aa为a, 期望获得aaa, 而不是a.