type-challenges:Trim Right

27 阅读1分钟

Trim Right

问题描述

实现 TrimRight<T> ,它接收确定的字符串类型并返回一个新的字符串,其中新返回的字符串删除了原字符串结尾的空白字符串。

例如

type Trimed = TrimRight<'  Hello World  '> // 应推导出 '  Hello World'
// ============= Test Cases =============
import type { Equal, Expect } from './test-utils'type cases = [
  Expect<Equal<TrimRight<'str'>, 'str'>>,
  Expect<Equal<TrimRight<'str '>, 'str'>>,
  Expect<Equal<TrimRight<'str     '>, 'str'>>,
  Expect<Equal<TrimRight<'     str     '>, '     str'>>,
  Expect<Equal<TrimRight<'   foo bar  \n\t '>, '   foo bar'>>,
  Expect<Equal<TrimRight<''>, ''>>,
  Expect<Equal<TrimRight<'\n\t '>, ''>>,
]
​
​
// ============= Your Code Here =============
type Space= ' ' | '\n' | '\t'
type TrimRight<S extends string> = S extends `${infer L}${Space}`? TrimRight<L>: S
​

简单题我重拳出击,判断最右边的字符串是否是 Space 类型即可,如果是,则将左边的内容继续递归判断,最后返回。