Skip to content

ContainsOneItem Method ​

The containsOneItem() method determines if the collection contains exactly one element. This is useful for validations and checking unique conditions.

Basic Syntax ​

typescript
collect(items).containsOneItem()

Examples ​

Basic Usage ​

typescript
import { collect } from 'ts-collect'

const single = collect([1])
console.log(single.containsOneItem()) // true

const multiple = collect([1, 2, 3])
console.log(multiple.containsOneItem()) // false

const empty = collect([])
console.log(empty.containsOneItem()) // false

Working with Objects ​

typescript
interface User {
  id: number
  name: string
}

const singleUser = collect<User>([
  { id: 1, name: 'John' }
])
console.log(singleUser.containsOneItem()) // true

const multipleUsers = collect<User>([
  { id: 1, name: 'John' },
  { id: 2, name: 'Jane' }
])
console.log(multipleUsers.containsOneItem()) // false

Real-world Examples ​

Validation Checks ​

typescript
interface ValidationResult {
  field: string
  errors: string[]
}

function hasOnlyOneError(result: ValidationResult): boolean {
  return collect(result.errors).containsOneItem()
}

// Example usage
const valid = { field: 'email', errors: ['Invalid format'] }
console.log(hasOnlyOneError(valid)) // true

const invalid = { field: 'password', errors: ['Too short', 'Needs number'] }
console.log(hasOnlyOneError(invalid)) // false

Active Session Check ​

typescript
interface Session {
  id: string
  userId: number
  active: boolean
}

function hasUniquePlatformSession(sessions: Session[]): boolean {
  const activeSessions = collect(sessions)
    .filter(session => session.active)

  return activeSessions.containsOneItem()
}

// Example usage
const sessions = [
  { id: 'a1', userId: 1, active: true },
  { id: 'a2', userId: 1, active: false },
  { id: 'a3', userId: 1, active: false }
]

console.log(hasUniquePlatformSession(sessions)) // true

Combining with Other Methods ​

typescript
interface Task {
  id: number
  status: 'pending' | 'in-progress' | 'completed'
  priority: number
}

const tasks = collect<Task>([
  { id: 1, status: 'pending', priority: 1 },
  { id: 2, status: 'in-progress', priority: 2 },
  { id: 3, status: 'completed', priority: 3 }
])

// Check if there's exactly one task in progress
const hasOneInProgress = tasks
  .filter(task => task.status === 'in-progress')
  .containsOneItem()

console.log(hasOneInProgress) // true

// Check if there's exactly one high-priority task
const hasOneHighPriority = tasks
  .filter(task => task.priority > 2)
  .containsOneItem()

console.log(hasOneHighPriority) // true

Business Logic Examples ​

typescript
interface Product {
  id: number
  name: string
  featured: boolean
}

function hasValidFeaturedProduct(products: Product[]): boolean {
  return collect(products)
    .filter(product => product.featured)
    .containsOneItem()
}

// Example usage
const products = [
  { id: 1, name: 'Product A', featured: true },
  { id: 2, name: 'Product B', featured: false },
  { id: 3, name: 'Product C', featured: false }
]

console.log(hasValidFeaturedProduct(products)) // true

Error Handling ​

typescript
interface ApiResponse<T> {
  data: T | null
  errors: string[]
}

function hasOnlySingleError<T>(response: ApiResponse<T>): boolean {
  return collect(response.errors).containsOneItem()
}

// Example usage
const response1: ApiResponse<string> = {
  data: null,
  errors: ['Invalid token']
}
console.log(hasOnlySingleError(response1)) // true

const response2: ApiResponse<string> = {
  data: null,
  errors: ['Invalid token', 'Server error']
}
console.log(hasOnlySingleError(response2)) // false

Type Safety ​

typescript
// The method works with any type
const numbers = collect([1])
const strings = collect(['hello'])
const objects = collect([{ key: 'value' }])

console.log(numbers.containsOneItem()) // true
console.log(strings.containsOneItem()) // true
console.log(objects.containsOneItem()) // true

Return Value ​

Returns a boolean value:

  • true if the collection contains exactly one element
  • false if the collection is empty or contains more than one element

Released under the MIT License.