Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
module api {
export var someController = {
someMethod: function(id : number) : JQueryPromise<void> {
return api.processRequest(`/api/someController/someMethod?id=${id}`);
}
}
}У меня свой велосипед
Просто генерирую интерфейсы для всего что входит и выходит из контроллеров
MVC-код в отдельную сборку
TypeLite
[DataContract]
public class OrderViewModel
{
[DataMember(Name = "itemName")]
public string ItemName { get; set; }
[DataMember(Name = "quantity")]
public int Quantity { get; set; }
public decimal Subtotal { get; set; }
public bool IsPaid { get; set; }
public string ClientName { get; set; }
public string Address { get; set; }
}
interface OrderViewModel {
itemName: string;
quantity: number;
}
[DataContract]
public class OrderViewModel
{
[DataMember]
public string ItemName { get; set; }
[DataMember]
public int Quantity { get; set; }
public decimal Subtotal { get; set; }
public bool IsPaid { get; set; }
public string ClientName { get; set; }
public string Address { get; set; }
}
interface OrderViewModel {
itemName: string;
quantity: number;
}
Кстати о птичках — коль пошла такая пляска — можете потыкать у Json.NET свойство атрибута… как же его… по-моему NullValueHandling — и эта радость не будет отправлять на клиент null-поля (которые там будут undefined, но при проверке через if (object.Field) это не страшно).
Ну и чтобы не разносить на два комментария — вы упомянули, что не для всех классов, которые помечены [DataContract] нужно генерировать интерфейсы. Но тогда получается что надо классы еще чем-то помечать. Мол — ты, типа, для этих генерируй, а для этих не генерируй. Можно пометить их тем же [TsInterface], что и является дефолтной практикой для R.T.
А вот, кстати, переименования автоматического у меня нет. Как-то совсем даже забыл про него. Привык на сервере и на клиенте использовать PascalCase (и можете бить меня за это тапками). Но в следующей версии сделаю.
Вообще, меня давно и прочно будоражит идея тесной интеграции Back-End и Front-End на .NET стеке, что в свою очередь даже вылилось в попытку с наскоку написать целый транслятор из C# в JavaScript.
Чем не устроили существующие трансляторы
Commits on Apr 24, 2014
@bkiers
Added an ECMAScript grammar.
Но в общем была у меня какая-то грамматика для ANTLR-а, из которой я сгенерил все необходимое, сделал playground для тестирования, нажал F5 — и получил зацикливание на простеньком js-файле. С тех пор я ANTLR-ом не пользуюсь.
www.antlr3.org/grammar/list.html
Reinforced.Typings — библиотека для автоматической генерации TypeScript-тайпингов и не только