TLDR; In TypeScript, we can retrieve type information in many different ways. In type context we can use: typeof - refer to the type of a value or a property: typeof "some string" is string ; typeof 1 is number etc. keyof - given an object, reduces it to an union of it’s keys: type keys = keyof { name: "Bobi", age: 29 } resolves to the following type: type keys = "name" | "age" indexed access - given type Person = { name: "Bobi" } and type PersonName = Person["name"] , the PersonName resolves to string TypeScript is great when it comes to types reusability. Once defined, a type can be “massaged” in order to suit different business logic needs. Here’s one simple example. 1 2 3 4 5 6 7 8 9 type Person = { name: string, age: number }; const person: Person = { name: "Bobi" , age: 29 }; const updateName = (p: Person, name: string) => { p.name = name; } updateName(person, "John" ); /