Нет, где он может, он определяет.
К примеру, если ты сделаешь
const user = { id: 1, username: "Neo", fullname: "Олег", }
Он тут поймет что это за тип, только ты не сможешь тут указать необязательные поля и не сможешь указать больше.
И можно даже из него тип создать.
type User = typeof user;
И получишь тип:
type User = { id: number; username: string; fullname: string; }
И можешь тогда пользователей так создавать:
const user2: User = { id: 2, username: "Fi1osof", fullname: "Николай", }
Но можно и расширить тип:
type User = typeof user & { email?: string };
И тогда уже новому пользователю можно задать емейл. Только обрати внимание, что создание типа User из объекта user совсем не делает объект user typeof User. Тот сам по себе. Мы просто говорим "А создай-ка нам из структуры такого-то объекта Тип, чтобы мы могли создавать подобные объекты с таким же типом и они были совместмы". И если мы делаем расширенный тип с новыми обязательными полями, то этот тип уже не будет совместим с исходным объектом.

Вот можешь поиграться здесь: https://www.typescriptlang.org/play?#code/LAKAxg9...