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

时间:2014-02-21 01:19:06

标签: web visual-studio-2013 typescript web-essentials

我安装了带有web essentials 2013的visual studio 2013.我右键单击.cs文件并选择“Web Essentials - >创建Typescript intellisense文件”,这样我就可以获得一个我可以参考的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是指定在序列化期间使用的字符串,也就是通过线路连接到客户端的字符串。我做了一些调查和代码:

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

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

第二个问题是这一行:

data: test.CustomPM;

在安装了typescript的visual studio 2013中,test.CustomPM给出了一个错误,因为它无法在测试模块中找到类型CustomPM,即使该类已生成到同一个“测试”模块中并可用于使用。缺少的部分是d.ts文件顶部的这一行:

/// <reference path="./CustomPM.cs.d.ts"/>

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

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

2 个答案:

答案 0 :(得分:0)

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

但我会给你一个非常好的替代

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

您只需将attribut [TsClass]放在您想要的类上。

如果您希望TS接口以I和所有属性camelCase开头,请编辑 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)); 

答案 1 :(得分:0)

您可以在基础tsconfig.json中引用生成的类型,然后在每个打字稿文件中都不需要自定义引用:

{
  "compilerOptions": {
    "module": "commonjs",
    "target": "es6",
    "jsx": "preserve"
  },
  "files": [
    "../typings/index.d.ts",
    "./TestForm.tsx",
    "./declaration.d.ts",
    "../models/models.cs.d.ts"
  ]
}