[Typescript] 37. Medium - KebabCase *

Replace the camelCase or PascalCase string with kebab-case.

FooBarBaz -> foo-bar-baz

For example

type FooBarBaz = KebabCase<"FooBarBaz">;
const foobarbaz: FooBarBaz = "foo-bar-baz";

type DoNothing = KebabCase<"do-nothing">;
const doNothing: DoNothing = "do-nothing";

 

For the First letter, we just need to use lowercase, for the rest, we check if REST is the same as Uncapitalize version of REST, then keep the same, otherwise add '-' in between.

type KebabCase<S> = S extends `${infer First}${infer REST}` 
  ? REST extends Uncapitalize<REST> 
    ? `${Lowercase<First>}${KebabCase<REST>}`
    : `${Lowercase<First>}-${KebabCase<REST>}`
  : S;

/* _____________ Test Cases _____________ */
import type { Equal, Expect } from '@type-challenges/utils'

type cases = [
  Expect<Equal<KebabCase<'FooBarBaz'>, 'foo-bar-baz'>>,
  Expect<Equal<KebabCase<'fooBarBaz'>, 'foo-bar-baz'>>,
  Expect<Equal<KebabCase<'foo-bar'>, 'foo-bar'>>,
  Expect<Equal<KebabCase<'foo_bar'>, 'foo_bar'>>,
  Expect<Equal<KebabCase<'Foo-Bar'>, 'foo--bar'>>,
  Expect<Equal<KebabCase<'ABC'>, 'a-b-c'>>,
  Expect<Equal<KebabCase<'-'>, '-'>>,
  Expect<Equal<KebabCase<''>, ''>>,
  Expect<Equal<KebabCase<'😎'>, '😎'>>,
]

 

posted @   Zhentiw  阅读(19)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
历史上的今天:
2021-09-26 [Cloud Architect] 7. Serverless Computing
2018-09-26 [RxJS] Create a Reusable Operator from Scratch in RxJS
2018-09-26 [RxJS] Use `lift` to Connect a `source` to a `subscriber` in RxJS
2017-09-26 [Javascirpt AST] Babel Plugin -- create new CallExpression
2017-09-26 [Python] Object spread operator in Python
2017-09-26 [Javascript AST] 3. Continue: Write ESLint rule
2016-09-26 [Angular2 Router] Configuring a Home Route and Fallback Route - Learn An Essential Routing Concept
点击右上角即可分享
微信分享提示