J'ai la classe C # suivante:
public class JsonBackup
{
public int Added { set; get; }
public int DEVCount { set; get; }
public int DS1Count { set; get; }
public IList<ViewEvent> Events { get; set; }
public IEnumerable<string> Errors { set; get; }
public int Rejected { set; get; }
public bool Success { set; get; }
public int Updated { set; get; }
}
et ce code pour renvoyer les données JSON à mon navigateur:
return Json(new JsonBackup
{
Added = added,
DEVCount = devCount,
DS1Count = ds1Count,
Events = t.Events,
Rejected = rejected,
Success = true,
Updated = updated
});
Les données sont renvoyées ici:
$.ajax("/Backup/Data/Backup",
{
cache: false,
dataType: 'json',
type: 'POST'
})
.done(function (data: ) {
console.log(data);
backupDone(data, ajaxElapsed);
});
et utilisé dans d'autres endroits et ici aussi:
$.each(data.Events, function (i, item) {
$("#stats-list li:eq("+(4+i)+")").after('<li>' + item.Description + ' : ' + item.Elapsed + ' ms</li>');
});
Est-il possible pour moi de créer un type TypeScript et d'affecter des données à ce type afin que je puisse par exemple obtenir Intellisense lors de la sélection de choses telles que
data.Added or data.DEVCount etc?
Le moyen le plus simple d'y parvenir est de créer une interface pour IJsonBackup et lorsque vous recevez json, il vous suffit de le caster sur IJsonBackup
interface IViewEvent
{
}
interface IJsonBackup
{
Added : number;
DEVCount : number;
DS1Count : number;
Events : IViewEvent[];
Errors : string[];
Rejected : number;
Success : bool;
Updated : number;
}
Dans votre définition de classe:
backupDone(data: IJsonBackup, ajaxElapsed: any)
{
}
$.ajax("/Backup/Data/Backup",
{
cache: false,
dataType: 'json',
type: 'POST'
})
.done(function (data: any) {
console.log(data);
backupDone(<IJsonBackup>data, ajaxElapsed);
});