// Avoid making a property optional to support two separate scenarios. // Doing so redunces type safety. type User = { // Making id optional since unsaved users don't have an id yet. π id?: number; name: string; email: string; } // Instead, declare separate types. Then each scenario is fully type safe. π type User = { id: number; name: string; email: string; } // Separate type for unsaved users. // Deriving from the User type via Omit to keep types clean and lean. type UnsavedUser = Omit<User, "id">;