ToSnake<S>: S extends string
    ? S extends `${infer Head}${CapitalChars}${infer Tail}`
        ? Head extends ""
            ? Tail extends ""
                ? Lowercase<S>
                : S extends `${infer Caps}${Tail}`
                    ? Caps extends CapitalChars
                        ? Tail extends CapitalLetters
                            ? `${Lowercase<Caps>}_${Lowercase<Tail>}`
                            : Tail extends `${CapitalLetters}${string}`
                                ? `${ToSnake<Caps>}_${ToSnake<Tail>}`
                                : `${ToSnake<Caps>}${ToSnake<Tail>}`
                        : never
                    : never
            : Tail extends ""
                ? S extends `${Head}${infer Caps}`
                    ? Caps extends CapitalChars
                        ? Head extends Lowercase<Head>
                            ? Caps extends Numbers
                                ? never
                                : `${ToSnake<Head>}_${ToSnake<Caps>}`
                            : never
                        : never
                    : never
                : S extends `${Head}${infer Caps}${Tail}`
                    ? Caps extends CapitalChars
                        ? Head extends Lowercase<Head>
                            ? Tail extends CapitalLetters
                                ? `${ToSnake<Head>}_${ToSnake<Caps>}_${Lowercase<Tail>}`
                                : Tail extends `${CapitalLetters}${string}`
                                    ? Head extends Numbers
                                        ? never
                                        : Head extends `${string}${Numbers}`
                                            ? never
                                            : `${Head}_${ToSnake<Caps>}_${ToSnake<Tail>}`
                                    : `${ToSnake<Head>}_${Lowercase<Caps>}${ToSnake<Tail>}`
                            : never
                        : never
                    : never
        : S
    : never

Type Parameters

  • S extends string | number | symbol

Generated using TypeDoc