KebabCase
提出詳細
type A = { A: 'a'; B: 'b'; C: 'c'; D: 'd'; E: 'e'; F: 'f'; G: 'g'; H: 'h'; I: 'i'; J: 'j'; K: 'k'; L: 'l'; M: 'm'; N: 'n'; O: 'o'; P: 'p'; Q: 'q'; R: 'r'; S: 's'; T: 't'; U: 'u'; V: 'v'; W: 'w'; X: 'x'; Y: 'y'; Z: 'z'; }; type KebabCase<S extends string, Acc extends string = ""> = S extends `${infer Head}${infer Rest}` ? Head extends "-" | "_" ? KebabCase<Rest, `${Acc}${Head}`> : Head extends keyof A ? KebabCase<Rest, `${Acc}${Acc extends '' ? '' : '-'}${A[Head]}`> : KebabCase<Rest, `${Acc}${Head}`> : Acc
提出日時 | 2025-09-15 16:41:33 |
---|---|
問題 | KebabCase |
ユーザー | balckowl |
ステータス | Accepted |
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<'😎'>, '😎'>>, ]