【问题标题】:Using Web Essentials 2013 to generate typescript intellisense file not working使用 Web Essentials 2013 生成打字稿智能感知文件不起作用
【发布时间】:2014-03-22 07:26:47
【问题描述】:

我安装了带有 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"/>

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

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

【问题讨论】:

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


    【解决方案1】:

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

    但我会给你替代,效果非常好:

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

    您只需将属性 [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)); 
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2017-06-18
        • 2020-10-04
        • 2016-11-20
        • 2017-06-28
        • 2016-10-16
        • 2017-05-10
        • 1970-01-01
        • 2023-03-16
        • 2011-07-17
        相关资源
        最近更新 更多