In JavaScript, `myObject.someProperty` will return `undefined` if `someProperty`doesn't exist. This has caused an uncountable number of errors in production applications. The most common symptom is the "undefined is not a function" error when we do `myObject.someProperty()`. TypeScript's object types let us catch this type of error at compile time. No more finding these bugs because they fail in production! An object type specifies each property's name and type. Object types require that all properties are present. They also require properties to match the property types in the type definition. ```typescript type User = { email: string, admin: boolean }; let amir: User = { email: '[email protected]', admin: true, }; amir.admin; //➞ true ``` The object type syntax looks similar to the literal object syntax. However, we can't use expressions like `1 + 1` or `true || false` in a type. That would be a syntax error because expressions are never allowed in types. An object's properties can have any type. They can be simple types like strings, or complex types like other objects. ```typescript type Reservation = { user: { email: string admin: boolean } roomNumber: number }; let reservation: Reservation = { user: { email: '[email protected]', admin: true }, roomNumber: 101, }; reservation.user.email; //➞ '[email protected]' ```