FreezeTypes
Take any object value and lock down the types of its writable properties.
const obj = objname = 'Jimmy'objname = 4 // throws
TypeError: Cannot set type-frozen property name from type String to type Number.
.../.../your-js-file.js:75:54
...
ES5/6 Class Support
{ thisname = name thisage = age } const user = username = 35 // throwsuserage = 'Jimmy' // throws
Extend and re-freeze.
Type-frozen objects are not meant to behave as if they were statically typed. Instead, they are freely extendable, and after any extension, an object can be re-frozen, as follows:
const obj = name: 'John Smith' objage = 24 // Extend the object with an age property. // Re-freeze types to capture the extension. objage = false // throws
However, once frozen, an object cannot be un-frozen (except by painful, fussy effort). Moreover, a frozen property cannot be deleted (frozen properties are non-configurable).