Могу ли я создать тип TypeScript и использовать его, когда AJAX возвращает данные JSON?
У меня есть следующий класс С#:
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; }
}
и этот код возвращает данные JSON в мой браузер:
return Json(new JsonBackup
{
Added = added,
DEVCount = devCount,
DS1Count = ds1Count,
Events = t.Events,
Rejected = rejected,
Success = true,
Updated = updated
});
Данные возвращаются сюда:
$.ajax("/Backup/Data/Backup",
{
cache: false,
dataType: 'json',
type: 'POST'
})
.done(function (data: ) {
console.log(data);
backupDone(data, ajaxElapsed);
});
и используется в других местах, а также здесь:
$.each(data.Events, function (i, item) {
$("#stats-list li:eq("+(4+i)+")").after('<li>' + item.Description + ' : ' + item.Elapsed + ' ms</li>');
});
Возможно ли создать тип TypeScript и назначить данные этому типу, чтобы я мог
например, получить intellisense при выборе таких вещей, как
data.Added or data.DEVCount etc?
Ответы
Ответ 1
Простейший способ добиться этого - создать интерфейс для IJsonBackup, и когда вы получите json, просто отпустите его в IJsonBackup
interface IViewEvent
{
}
interface IJsonBackup
{
Added : number;
DEVCount : number;
DS1Count : number;
Events : IViewEvent[];
Errors : string[];
Rejected : number;
Success : bool;
Updated : number;
}
В определении вашего класса:
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);
});