You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

33 lines
835 B

import type { Equal, Expect } from '@type-challenges/utils'
type casesPalindrome = [
Expect<Equal<IsPalindrome<'abc'>, false>>,
Expect<Equal<IsPalindrome<'b'>, true>>,
Expect<Equal<IsPalindrome<'abca'>, false>>,
Expect<Equal<IsPalindrome<'abcba'>, true>>,
Expect<Equal<IsPalindrome<121>, true>>,
Expect<Equal<IsPalindrome<19260817>, false>>,
]
type CheckPalindrome<
T extends string[]
> =
T extends [infer First, ...infer Mid, infer Last]
? First extends Last
? Mid extends string[] ? CheckPalindrome<Mid> : never
: false
: true
;
type ToArr<T extends string> = T extends `${infer Head}${infer Tail}` ? [Head, ...ToArr<Tail>] : [];
type IsPalindrome<
T extends string | number
> =
T extends number
? IsPalindrome<`${T}`>
: T extends string
? CheckPalindrome<ToArr<T>>
: never