First, I really like that this leverages Typescript to its fullest. I'm a big fan of doing things like runtime reflection of compile time types.
However:
``` id: number & PrimaryKey & AutoIncrement = 0; ```
One thing that seems confusing is, (presumably) -- these compile time types are being translated into runtime type behavior. (I'm guessing by your Typescript transformer?). While this is very cool and concise, I suspect it could be super "magical".
In your case, has Deepkit felt too magical?