Home > other >  Property 'data' does not exist on type 'Promise<any>'
Property 'data' does not exist on type 'Promise<any>'

Time:11-03

I try to type a Promise.

Funcrion's code:

const getActivityLists = async () => {
        try {
            //let res: Promise<Item[]>
            let res: Promise<any>
            if (currentPlanValue !== null) {
                res = await getPlanActivityList(currentPlanValue.id)
            } else {
                res = await getActivitiesLists()
            }
            console.log(res)
            createCodesList(res.data) 
        } catch (error) {
            console.log(error)
        }
}

The problem is in the 'res.data'.

The network output looks like array of objects that I need.

But if I output 'res' to console, I have this:

{

"data": [
    {
        "id": "f62b5c25-0d98-4b49-9706-8516875e5527",
        "name": "Стажировка 2",
        "description": "Как проходить стажировки",
        "archive": false,
        "activites": [
            {
                "directionId": "edf8c771-3b01-49c8-84a0-6cf4ed900370",
                "activeId": "62b4c56b-3863-4373-8255-3cca6e70d478",
                "order": 1,
                "name": "DKO"
            },
            {
                "directionId": "4765d688-bc40-4c4f-b039-2dc4b16d3b7c",
                "activeId": "cb11db28-d7eb-413a-9348-f253a113c137",
                "order": 2,
                "name": "STAZH"
            },
            {
                "directionId": "cd5bb29d-c17d-47cb-9a05-ae121c7958fc",
                "activeId": "fa547f06-b00a-49fa-b647-0186b8cd3931",
                "order": 3,
                "name": "REGION"
            }
        ],
        "createdAt": "2022-10-28T11:04:28.924Z",
        "updatedAt": "2022-10-28T11:04:28.947Z",
        "activeId": "27718a9e-706d-4e23-940b-dbd10da3c5b8",
        "userId": null,
        "historyId": null
    }
],
"status": 200,
"statusText": "OK",
"headers": {
    "content-length": "4584",
    "content-type": "application/json; charset=utf-8"
},
"config": {
    "transitional": {
        "silentJSONParsing": true,
        "forcedJSONParsing": true,
        "clarifyTimeoutError": false
    },
    "transformRequest": [
        null
    ],
    "transformResponse": [
        null
    ],
    "timeout": 0,
    "xsrfCookieName": "XSRF-TOKEN",
    "xsrfHeaderName": "X-XSRF-TOKEN",
    "maxContentLength": -1,
    "maxBodyLength": -1,
    "env": {
        "FormData": null
    },
    "headers": {
        "Accept": "application/json, text/plain, */*"
    },
    "method": "get",
    "url": "http://localhost:3000/activitesList/list"
},
"request": {} }

My array is inside 'data', so I have to pass res.data into function 'createCodesList'.

When I try to type my 'res', I get error: Property 'data' does not exist on type 'Promise'

How to fix it?

I don't have any idea why Promise doesn't work. 'any' means that inside promise can be anything, doesn't it? But of course in future I want to type 'res' by my oun type Item[]. It also don't work now.

CodePudding user response:

Type of your response is actual response not a promise as you already awaiting the result so

 let res: Promise<any>

should be changed to

 let res: any

Or as T.J. Crowder in the comment change it to actual response type

let res:{data:any} //any should be replace with actual model and other properties should be added alongwith data
  • Related