Replace the `camelCase` or `PascalCase` string with `kebab-case`. Learn TypeScript template literal types in this medium-level challenge on TypeScriptPro.
In this medium-level challenge, you'll replace the camelcase or pascalcase string with kebab-case.
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"Change the following code to make the test cases pass (no type check errors).
/* _____________ Your Code Here _____________ */
type KebabCase<S> = any
/* _____________ Test Cases _____________ */
import type { Equal, Expect } from '../helpers'
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<'π'>, 'πUnlock 102+ medium, hard, and extreme challenges to master advanced TypeScript.
One-time payment. Lifetime access.
type KebabCase<S extends string> = S extends `${infer Letter}${infer Rest}`
? Rest extends Uncapitalize<Rest>
? `${Uncapitalize<Letter>}${KebabCase<Rest>}`
: `${Uncapitalize<Letter>}-${KebabCase<Rest>}`
: SHow it works:
S to be a string.infer to capture the first letter and the rest of the string.string consisting of the first letter (but uncapitalized) and the rest of the string recursively passed into KebabCase<S2>.string consisting of the first letter (but uncapitalized) and a hyphen (-) and the rest of the string recursively passed into KebabCase<S2>.This challenge helps you understand TypeScript's advanced type system and how to apply this concept in real-world scenarios.
This challenge is originally from here.