import { Meta } from '@storybook/addon-docs/blocks'

<Meta title='@dxtmisha/vi/functional-basic/Functions/getItemByPath - Truy xuất thuộc tính lồng sâu'/>

# `getItemByPath`

Một tiện ích giúp trích xuất giá trị an toàn từ một đối tượng lồng ghép sâu, sử dụng chuỗi đường dẫn có các khóa được phân tách bằng dấu chấm (`.`). Nếu thuộc tính hoặc bất kỳ nhánh trong đường dẫn nào không được tìm thấy, hàm sẽ trả về `undefined` theo cách bắt lỗi an toàn (giúp ngăn chặn lỗi *Cannot read properties of undefined*).

**Lưu ý:** Hàm này hỗ trợ truyền vào một kiểu generic `R` (mặc định là `string`) cho giá trị trả về. Hàm hỗ trợ tìm kiếm phần tử của mảng bằng cách sử dụng các chỉ mục chuỗi số ở trong đường dẫn (ví dụ: `"list.0.name"`).

**Tham số:**
- `item: T` — Đối tượng hoặc mảng cần duyệt giá trị.
- `path: string` — Đường dẫn để tìm thuộc tính phân tách bằng dấu chấm (`.` - ví dụ: `"user.address.city"` hoặc `"list.1.id"`).

**Trả về:**
`R | undefined` — Giá trị của thuộc tính được yêu cầu (kiểu `R`), hoặc `undefined` nếu bất kỳ nhánh phụ nào chưa tồn tại.

```typescript
import { getItemByPath } from '@dxtmisha/functional-basic'

const data = {
  profile: {
    details: {
      bio: 'Lập trình viên giao diện'
    }
  },
  roles: ['admin', 'manager']
}

// Lấy giá trị thành công
console.log(getItemByPath(data, 'profile.details.bio')) // 'Lập trình viên giao diện'

// Lấy thuộc tính của mảng qua string index
console.log(getItemByPath(data, 'roles.0')) // 'admin'

// Xử lý báo lỗi thuộc tính lồng ghép bị khuyết an toàn
console.log(getItemByPath(data, 'profile.missing.key')) // undefined
```
