使用Web Essentials 2013生成typescript intellisense文件无法正常工作

Mic*_*lle 5 web typescript web-essentials visual-studio-2013

我的Visual Studio 2013与网络安装要领2013年我右键单击一个cs文件,并选择"网络精华 - >创建打字稿智能感知文件",这样,我得到一个打字稿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; }
    }
}
Run Code Online (Sandbox Code Playgroud)

我得到的d.ts文件是:

declare module test {
    interface MyPM{
        id: number;
        data: test.CustomPM;
    }
}
Run Code Online (Sandbox Code Playgroud)

第一个问题是该行:

[DataContract(Name = "MyDTO")]
Run Code Online (Sandbox Code Playgroud)

在生成过程中被忽略了.它不会生成一个名为MyDTO的类,而是一个名为MyPM的类,即使MyDTO是指定在序列化期间使用的字符串,也就是通过线路连接到客户端的字符串.我做了一些调查和代码:

https://github.com/madskristensen/WebEssentials2013/blob/master/EditorExtensions/Commands/Code/IntellisenseParser.cs#L207

表示它使用CodeClass.Name属性来确定类名.有没有办法在类上使用属性(除了DataContract Name之外),以使CodeClass.Name属性包含除实际类名之外的另一个字符串?

第二个问题是这一行:

data: test.CustomPM;
Run Code Online (Sandbox Code Playgroud)

在Visual Studio 2013年安装了打字稿,test.CustomPM给我一个错误,因为它无法找到测试模块的类型CustomPM,即使类已经生成到同一个"测试"模块可供使用.缺少的部分是d.ts文件顶部的这一行:

/// <reference path="./CustomPM.cs.d.ts"/>
Run Code Online (Sandbox Code Playgroud)

但是,我一直无法找到让生成器生成此方法的方法.

我真的很感激任何人都可以解决这些问题的解决方法.谢谢!

Ant*_*EVE 0

这是一个老问题了,我不会直接回答,因为我不知道 WebEssentials 的这个功能。

但我会给你一个非常有效的替代方案:

TypeLite - http://type.litesolutions.net/

您只需将属性放在[TsClass]您想要的类上即可。

如果您希望 TS 界面以驼峰命名I且所有属性都以驼峰命名,请编辑 TypeLite.Net4.tt

 var ts = TypeScript.Definitions()
        .WithReference("Enums.ts")
        .ForLoadedAssemblies()
        .WithFormatter((type, f) => "I" + ((TypeLite.TsModels.TsClass)type).Name) 
        .WithMemberFormatter((TypeLite.TsModels.TsProperty identifier) => Char.ToLower(identifier.Name[0]) + identifier.Name.Substring(1)); 
Run Code Online (Sandbox Code Playgroud)