Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how to remove properties via mapped type in TypeScript

Tags:

Here is the code

class A {     x = 0;     y = 0;     visible = false;     render() {      } }  type RemoveProperties<T> = {     readonly [P in keyof T]: T[P] extends Function ? T[P] : never//; };   var a = new A() as RemoveProperties<A> a.visible // never a.render() // ok! 

I want to remove " visible / x / y " properties via RemoveProperties ,but I can only replace it with never

like image 407
Wander Wang Avatar asked Mar 21 '18 03:03

Wander Wang


1 Answers

You can use the same trick as the Omit type uses:

// We take the keys of P and if T[P] is a Function we type P as P (the string literal type for the key), otherwise we type it as never.  // Then we index by keyof T, never will be removed from the union of types, leaving just the property keys that were not typed as never type JustMethodKeys<T> = ({[P in keyof T]: T[P] extends Function ? P : never })[keyof T];   type JustMethods<T> = Pick<T, JustMethodKeys<T>>;  
like image 56
Titian Cernicova-Dragomir Avatar answered Oct 24 '22 02:10

Titian Cernicova-Dragomir