mirror of
https://github.com/sindresorhus/type-fest.git
synced 2026-01-25 14:57:30 +00:00
73 lines
1.7 KiB
TypeScript
73 lines
1.7 KiB
TypeScript
import type {CamelCaseOptions, _DefaultCamelCaseOptions} from './camel-case.d.ts';
|
|
import type {ApplyDefaultOptions} from './internal/index.d.ts';
|
|
import type {PascalCase} from './pascal-case.d.ts';
|
|
|
|
/**
|
|
Convert object properties to pascal case recursively.
|
|
|
|
This can be useful when, for example, converting some API types from a different style.
|
|
|
|
@see PascalCase
|
|
@see PascalCasedProperties
|
|
|
|
@example
|
|
```
|
|
import type {PascalCasedPropertiesDeep} from 'type-fest';
|
|
|
|
interface User {
|
|
userId: number;
|
|
userName: string;
|
|
}
|
|
|
|
interface UserWithFriends {
|
|
userInfo: User;
|
|
userFriends: User[];
|
|
}
|
|
|
|
const result: PascalCasedPropertiesDeep<UserWithFriends> = {
|
|
UserInfo: {
|
|
UserId: 1,
|
|
UserName: 'Tom',
|
|
},
|
|
UserFriends: [
|
|
{
|
|
UserId: 2,
|
|
UserName: 'Jerry',
|
|
},
|
|
{
|
|
UserId: 3,
|
|
UserName: 'Spike',
|
|
},
|
|
],
|
|
};
|
|
|
|
const preserveConsecutiveUppercase: PascalCasedPropertiesDeep<{fooBAR: {fooBARBiz: [{fooBARBaz: string}]}}, {preserveConsecutiveUppercase: true}> = {
|
|
FooBAR: {
|
|
FooBARBiz: [{
|
|
FooBARBaz: 'string',
|
|
}],
|
|
},
|
|
};
|
|
```
|
|
|
|
@category Change case
|
|
@category Template literal
|
|
@category Object
|
|
*/
|
|
export type PascalCasedPropertiesDeep<Value, Options extends CamelCaseOptions = {}> =
|
|
_PascalCasedPropertiesDeep<Value, ApplyDefaultOptions<CamelCaseOptions, _DefaultCamelCaseOptions, Options>>;
|
|
|
|
type _PascalCasedPropertiesDeep<Value, Options extends Required<CamelCaseOptions>> = Value extends Function | Date | RegExp
|
|
? Value
|
|
: Value extends Array<infer U>
|
|
? Array<_PascalCasedPropertiesDeep<U, Options>>
|
|
: Value extends Set<infer U>
|
|
? Set<_PascalCasedPropertiesDeep<U, Options>>
|
|
: Value extends object
|
|
? {
|
|
[K in keyof Value as PascalCase<K, Options>]: _PascalCasedPropertiesDeep<Value[K], Options>;
|
|
}
|
|
: Value;
|
|
|
|
export {};
|