实现 Capitalize<T>
,它将字符串的第一个字母转换为大写,其余字母保持原样
例如:
type capitalized = Capitalize<'hello world'> // expected to be 'Hello world'
答案
type MyCapitalize<S extends string> = S extends `${infer L}${infer R}` ? `${Uppercase<L>}${R}` : S
关于 TS 如何确定
L
和R
中的哪一个应该占据其余字符?例如,如果S
是'abc'
,为什么是L='a'
和R='bc'
,而不是L='ab'
和R='c'
?经过测试,我认为它是这样工作的:
TypeScript Regex ${infer A}
/(.*)/
${infer A}${infer B}
/(.+?)(.*)/
${infer A}${infer B}${infer C}
/(.+?)(.+?)(.*)/