Дійсно залежить від того, що ви намагаєтесь зробити. Типи - це документація в машинописі, тому ви хочете показати намір щодо того, як цю річ слід використовувати під час створення типу.
Варіант 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.