yunliuyan / type-challenges

typescript-challenges
0 stars 2 forks source link

00019-medium-trim-right #19

Open yunliuyan opened 1 year ago

yunliuyan commented 1 year ago

Trim Right 中等 #template-literal

by Yugang Cao @Talljack

接受挑战    English 한국어

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

例如

type Trimed = TrimRight<'  Hello World  '> // 应推导出 '  Hello World'

返回首页 分享你的解答 查看解答

相关挑战

106・去除左侧空白 108・去除两端空白字符
yunliuyan commented 1 year ago

思路

关键要判断右侧是否全是空字符串

代码实现

type IsEmptyStr<S extends string> = S extends '' ? true : S  extends ` ${infer R}` ? IsEmptyStr<R> : false;

type TrimRight<S extends string> = S extends IsEmptyStr<S> ? '' : S extends `${infer L} ${infer R}` ? IsEmptyStr<R> extends true ? L : `${L} ${TrimRight<R>}` : never;

type Trimed = TrimRight<'  Hello World  '> // 应推导出 '  Hello World'
Janice-Fan commented 1 year ago
type TrimRight<T extends string> = T extends `${infer F}${' ' | '\t' | '\n'}` ? TrimRight<F> : T;

type Trimed = TrimRight<'  Hello World  '> // 应推导出 '  Hello World'
liangchengv commented 1 year ago
type TrimRight<T> = T extends `${infer U}${' '}` ? TrimRight<U> : T;

type Trimed = TrimRight<'  Hello World  '>