На самом деле зависит от того, что вы пытаетесь сделать. Типы - это документация в машинописном тексте, поэтому вы хотите показать намерение о том, как эта вещь должна использоваться при создании типа.
Вариант 1. Если у пользователей могут быть некоторые, но не все атрибуты в течение их жизни
Сделайте все атрибуты необязательными
type User = {
attr0?: number
attr1?: string
}
Вариант 2. Если переменные, содержащие пользователей, могут начинаться с нуля
type User = {
...
}
let u1: User = null;
Хотя на самом деле здесь, если цель состоит в том, чтобы объявить объект User до того, как станет известно, что ему будет назначено, вы, вероятно, захотите обойтись let u1:Userбез какого-либо назначения.
Вариант 3: что вы, вероятно, захотите
На самом деле предпосылка машинописного текста - убедиться, что вы соответствуете ментальной модели, которую вы обрисовываете в типах, чтобы избежать ошибок. Если вы хотите добавлять элементы к объекту по одному, это привычка, которую TypeScript пытается заставить вас не делать.
Скорее всего, вы захотите создать несколько локальных переменных, а затем назначить их переменной, содержащей пользователя, когда она будет готова стать полноценным пользователем. Таким образом, вы никогда не останетесь с частично сформированным пользователем. Эти вещи отвратительны.
let attr1: number = ...
let attr2: string = ...
let user1: User = {
attr1: attr1,
attr2: attr2
}
userиметь тип,User | {}либоPartial<User>, либо вам нужно переопределитьUserтип, чтобы разрешить пустой объект. Прямо сейчас компилятор правильно сообщает вам, чтоuserэто не файлUser.