У меня установлена Visual Studio 2013 с Web Essentials 2013. Я щелкаю правой кнопкой мыши файл .cs и выбираю «Web Essentials -> Создать файл intellisense Typescript», чтобы получить файл typescript d.ts, на который я могу ссылаться в машинописном коде. . Я столкнулся с несколькими проблемами с этим. Скажем, мой класс выглядит следующим образом:
namespace SomeNamespace
{
[TypescriptModule("test")]
[DataContract(Name = "MyDTO")]
public partial class MyPM
{
[DataMember(Name = "id")]
public long Id { get; set; }
[Required]
[DataMember(Name = "name")]
public CustomPM Data{ get; set; }
}
}
Файл d.ts, который я получаю:
declare module test {
interface MyPM{
id: number;
data: test.CustomPM;
}
}
Первая проблема заключается в том, что строка:
[DataContract(Name = "MyDTO")]
игнорируется при генерации. Он генерирует не класс с именем MyDTO, а класс с именем MyPM, хотя MyDTO — это строка, указанная для использования во время сериализации, и именно она передается клиенту по сети. Я провел некоторое расследование и код здесь:
указывает, что он использует свойство CodeClass.Name для определения имени класса. Есть ли способ использовать атрибуты класса (что-то помимо имени DataContract), чтобы свойство CodeClass.Name содержало другую строку, помимо фактического имени класса?
Вторая проблема заключается в этой строке:
data: test.CustomPM;
В Visual Studio 2013 с установленным typescript test.CustomPM выдает мне ошибку, потому что не может найти тип CustomPM в тестовом модуле, даже если класс был сгенерирован в том же «тестовом» модуле и доступен для использования. Отсутствует часть этой строки в верхней части файла d.ts:
/// <reference path="./CustomPM.cs.d.ts"/>
Однако я не смог найти способ, чтобы генератор также генерировал это.
Я был бы очень признателен, если бы кто-нибудь мог пролить свет на способы решения этих проблем. Спасибо!