Issue
Given the following interface:
interface Entity {
A: boolean;
B: string;
C: number;
D: never
}
I would like to create a type that omits the properties that extends never
. Something like that:
type FilteredEntity = OmitNever<Entity>; // = { A: boolean; B: string; C: number };
How OmitNever
should be implemented?
Solution
Here is how I would solve your problem:
interface Entity {
A: boolean;
B: string;
C: number;
D: never
}
type Entries<T> = {
[K in keyof T]: [K, T[K]]
}[keyof T]
type EntriesWithValueOfType<T, U> = T extends [any, U] ? T : never;
type EntityNeverEntries = EntriesWithValueOfType<Entries<Entity>, never>
type KeysOfEntries<T> = T extends [infer U, any] ? U : never;
type OmitNever = Omit<Entity, KeysOfEntries<EntityNeverEntries>>
Answered By - Guerric P
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.