typescript / expert
Snippet
Filtering and Key Remapping of Interface Properties using Template Literals
Mapped type key remapping ('as' clause) combined with type inference on template string patterns allows selective property extraction and renaming. This pattern strips unwanted methods while transforming getter names (e.g. 'getUserName' -> 'userName') strictly at the type level.
snippet.ts
typescript
1
2
3
type GetterKeys<T> = { [K in keyof T as K extends `get${infer R}` ? Uncapitalize<R> : never]: T[K] };interface ApiService { getUserName(): string; getUserAge(): number; postData(data: object): void; }type CleanedApi = GetterKeys<ApiService>;
Breakdown
1
type GetterKeys<T> = { [K in keyof T as K extends `get${infer R}` ? Uncapitalize<R> : never]: T[K] };
Filters keys matching 'get...', removes the prefix, uncapitalizes the property name, and filters out non-getters with 'never'.
2
interface ApiService { getUserName(): string; getUserAge(): number; postData(data: object): void; }
Input interface containing mixed getter methods and mutation operations.
3
type CleanedApi = GetterKeys<ApiService>;
Maps ApiService to { userName: () => string; userAge: () => number; }, ignoring non-getter methods entirely.