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()) // falseWorking 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()) // falseReal-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)) // falseActive 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)) // trueCombining 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) // trueBusiness 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)) // trueError 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)) // falseType 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()) // trueReturn Value
Returns a boolean value:
trueif the collection contains exactly one elementfalseif the collection is empty or contains more than one element