I agree that type checking at runtime is really important for JS applications. That's why I made this: http://objectmodel.js.org ; it works really well with Babel, and it has non-nullable types by default from the beginning
You talk about the risk of code injection but it seems you don't care at all. This test for detecting serialized functions is ridiculously weak, making a XSS with this example as easy as:
let person ={
name: 'function f(){},alert("XSS")'
};
Of course you can try to sanitize any user-inserted data, but unless you like playing russian roulette, I strongly discourage you to go that way.