2017-09-29 4 views
0

Y a-t-il un moyen, que ce soit dans les spécifications JavaScript ou la plateforme IntelliJ, de définir la structure d'un objet que vous recevez, disons, un appel AJAX?Définir la structure de l'objet reçu?

Exemple:

$.ajax({ 
    type: 'POST', 
    url: 'https://myapi.domain.com/apitest', 
    success: function(payload) { 
     let username = payload.userNameField; //unresolved variable "userNameField" 
    } 
}); 

Dans l'exemple ci-dessus, WebStorm rapporte que payload.userNameField est une "variable non résolue".

Y a-t-il un moyen de définir l'objet de manière à ce qu'il ne montre pas d'erreurs et peut-être aussi d'auto-complétion?

+0

est 'payload.userNameField' défini? – guest271314

+0

Sur le backend (API) c'est ... Ce n'est pas dans le code client, c'est ce que je demande. Puis-je simplement définir 'payload = {userNameField:" "}' en dehors de l'appel ajax? –

+0

'payload = {userNameField:" "}' serait une variable différente de 'payload' à la fonction' success' de '$ .ajax()'. Qu'essayez-vous d'accomplir? – guest271314

Répondre

0

Merci à @chazsolo me montrant "Custom complex type" de JSDoc qui est supporté nativement par WebStorm, cette solution fonctionne très bien:

$.ajax({ 
    type: 'POST', 
    url: 'https://myapi.domain.com/apitest', 
    success: processResponse 
}); 

/** 
* Definition of the object returned by the api call 
* @typedef {Object} processResponse~payload 
* @property {string} userNameField - Username returned by API 
*/ 
/** 
* Definition of function that handles the response 
* @class 
* @param {...processResponse~payload} payload - the data returned by the call 
*/ 

function processResponse(payload) { 
     let username = payload.userNameField; //no errors now and autocomplete works! 
}; 
+1

Merci pour le pointeur et la réparation de l'erreur de copier/coller @chazsolo :) –