问题 #
剔除在指定字符串里的字符
type case1 = DropString<'butter fly!', ''> // 'butter fly!'
type case2 = DropString<'butter fly!', ' '> // 'butterfly!'
type case3 = DropString<'butter fly!', 'but'> // 'er fly!'
type case4 = DropString<' b u t t e r f l y ! ', 'but'> // ' e r f l y ! '
type case5 = DropString<' butter fly! ', ' '> // 'butterfly!'
type case6 = DropString<' b u t t e r f l y ! ', ' '> // 'butterfly!'
type case7 = DropString<' b u t t e r f l y ! ', 'but'> // ' e r f l y ! '
type case8 = DropString<' b u t t e r f l y ! ', 'tub'> // ' e r f l y ! '
type case9 = DropString<' b u t t e r f l y ! ', 'b'> // ' u t t e r f l y ! '
type case10 = DropString<' b u t t e r f l y ! ', 't'> // ' b u e r f l y ! '
解答 #
type IncludeString<T extends string, K extends string> = T extends `${infer F}${infer Rest}` ? F extends K ? true: IncludeString<Rest, K> : false;
type DropString<S extends string, R extends string> =
R extends ''
? S
: S extends `${infer H}${infer Rest}`
? IncludeString<R, H> extends true
? DropString<Rest, R>
: `${H}${DropString<Rest, R>}`
: S
拆分 #
- 只要看拆分后的字符在不在特定的字符串里就行了