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是指定在序列化期间使用的字符串,也就是通过线路连接到客户端的字符串.我做了一些调查和代码:
表示它使用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)
但是,我一直无法找到让生成器生成此方法的方法.
我真的很感激任何人都可以解决这些问题的解决方法.谢谢!
这是一个老问题了,我不会直接回答,因为我不知道 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)
| 归档时间: |
|
| 查看次数: |
1748 次 |
| 最近记录: |