Объявить индекс массива в машинописи - PullRequest
0 голосов
/ 07 сентября 2018

У меня есть этот интерфейс AjaxResponse:

interface AjaxResponse {
    calendar: {
        dates: {
            date: string,
            hours: {
                hour: string,
                id: number,
                status: string,
                client: {
                    name: string,
                    surname: string,
                    email: string,
                    phone: string,
                    id: number
                }
            }[]
        }[]
    },
    rights: string,
    listenerUrl: string
}

Я переберу список дат и отредактирую некоторые из них:

let dates: AjaxResponse['calendar']['dates']
let i: number
let l: number

    receive(response: AjaxResponse) {
                dates = response.calendar.dates
                l = dates.length
                for (i; i < l; i++) {
                    calendar.editDates(dates[i])
                }

Функция редактирования даты выглядит следующим образом:

editDates(newDate: AjaxResponse['calendar']['dates']) {
    }

dates[i] не скомпилируется, потому что моя последняя функция ожидает массив. Как я могу объявить одну дату, а не список дат в моей последней функции?

Редактировать: нашли рабочее решение, создав два интерфейса:

interface AjaxResponse {
    calendar: {
        dates: AjaxResponseDate[]
    },
    rights: string,
    listenerUrl: string
}

interface AjaxResponseDate {
    date: string,
    hours: {
        hour: string,
        id: number,
        status: string,
        client: {
            name: string,
            surname: string,
            email: string,
            phone: string,
            id: number
        }
    }
}

1 Ответ

0 голосов
/ 07 сентября 2018

Чтобы получить тип элемента в массиве, вы можете использовать запрос типа по number:

function editDates(newDate: AjaxResponse['calendar']['dates'][number]) {
}

Решение иметь t интерфейсы также возможно, но вы можете оставить один тип, если хотите.

...