Skip to content

Has Method

The has() method determines if one or more keys exists in the collection. It returns true if all specified keys exist in the collection.

Basic Syntax

typescript
// Check single key
collect(items).has(key: keyof T)

// Check multiple keys
collect(items).has(keys: (keyof T)[])

Examples

Basic Usage

typescript
import { collect } from 'ts-collect'

const data = collect({
  name: 'John',
  age: 30,
  email: 'john@example.com'
})

console.log(data.has('name')) // true
console.log(data.has(['name', 'age'])) // true
console.log(data.has(['name', 'phone'])) // false

Working with Arrays

typescript
const array = collect(['a', 'b', 'c'])

console.log(array.has(0)) // true
console.log(array.has([0, 1])) // true
console.log(array.has(5)) // false

Real-world Examples

Form Validation

typescript
interface FormData {
  username: string
  email: string
  password?: string
  confirmPassword?: string
}

function validateRegistrationForm(data: FormData) {
  const form = collect(data)

  // Check required fields
  const hasRequired = form.has([
    'username',
    'email',
    'password',
    'confirmPassword'
  ])

  if (!hasRequired) {
    throw new Error('Missing required fields')
  }

  return true
}

// Usage
const validForm = {
  username: 'john_doe',
  email: 'john@example.com',
  password: 'secret',
  confirmPassword: 'secret'
}

const invalidForm = {
  username: 'john_doe',
  email: 'john@example.com'
}

console.log(validateRegistrationForm(validForm)) // true
// validateRegistrationForm(invalidForm)            // throws Error

Configuration Validation

typescript
interface DatabaseConfig {
  host: string
  port: number
  username?: string
  password?: string
  options?: object
}

function validateDatabaseConfig(config: DatabaseConfig) {
  const conf = collect(config)

  // Check required configuration
  const hasRequiredConfig = conf.has(['host', 'port'])

  // Check authentication config
  const hasAuthConfig = !conf.has('username') || conf.has(['username', 'password'])

  return hasRequiredConfig && hasAuthConfig
}

// Usage
const validConfig = {
  host: 'localhost',
  port: 5432,
  username: 'admin',
  password: 'secret'
}

const invalidConfig = {
  host: 'localhost',
  username: 'admin' // Missing port and password
}

console.log(validateDatabaseConfig(validConfig)) // true
console.log(validateDatabaseConfig(invalidConfig)) // false

Advanced Usage

API Request Validation

typescript
interface ApiRequest {
  method: string
  headers: {
    'authorization'?: string
    'content-type'?: string
    'accept'?: string
  }
  body?: object
}

class RequestValidator {
  private requiredHeaders: string[] = ['authorization', 'content-type']

  validateRequest(request: ApiRequest) {
    const headers = collect(request.headers)

    // Check if all required headers are present
    if (!headers.has(this.requiredHeaders)) {
      throw new Error('Missing required headers')
    }

    // Additional validation for POST requests
    if (request.method === 'POST') {
      if (!collect(request).has('body')) {
        throw new Error('POST requests must include a body')
      }
    }

    return true
  }
}

Feature Flags

typescript
interface FeatureFlags {
  darkMode?: boolean
  betaFeatures?: boolean
  notifications?: {
    email?: boolean
    push?: boolean
  }
}

class FeatureManager {
  private features: Collection<FeatureFlags>

  constructor(features: FeatureFlags) {
    this.features = collect(features)
  }

  hasFeature(feature: string): boolean {
    return this.features.has(feature)
  }

  hasAllFeatures(features: string[]): boolean {
    return this.features.has(features)
  }

  canEnableNotifications(): boolean {
    return this.features.has(['notifications'])
      && collect(this.features.get('notifications')).has(['email', 'push'])
  }
}

Type Safety

typescript
interface TypedObject {
  required: string
  optional?: string
  nested?: {
    value: number
  }
}

const typed = collect<TypedObject>({
  required: 'value',
  nested: {
    value: 42
  }
})

// TypeScript ensures type safety
console.log(typed.has('required')) // ✓ Valid
console.log(typed.has(['required', 'nested'])) // ✓ Valid
// typed.has('nonexistent')                 // ✗ TypeScript error

Return Value

  • Returns true if:
    • Single key exists in the collection
    • All specified keys exist in the collection (when checking multiple keys)
  • Returns false if:
    • Single key doesn't exist in the collection
    • Any of the specified keys don't exist (when checking multiple keys)

Released under the MIT License.