Start here. This is the direct spoken answer to practice first.
Overview
TypeScript normally asks whether a value has the required shape, not whether it explicitly declared membership in a named type.
TypeScript is structurally typed: a value is assignable when its shape satisfies the target type, even if it was declared under a different name. Extra properties are usually allowed on an existing value, although a fresh object literal receives an excess-property check that catches likely mistakes. These are compile-time rules; they do not add runtime tags or validation.