Typelite是否可以生成TypeScript类而不是接口?类似的东西:
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
到
export class Person
{
constructor() {}
FirstName: string;
LastName: string;
}
我不是在生成的类中寻找任何功能,只是一种更简单的方法来实现类clientide而无需初始化整个接口。
例如,我希望能够这样做:
var person = new Person();
而不是
var person = {
FirstName: null,
LastName: null
};
答案 0 :(得分:8)
我所做的是对tt文件进行简单调整,使您免于编译自己的typelite:
<#= definitions.ToString()
.Replace("interface", "export class")
.Replace("declare module", "module") #>
答案 1 :(得分:5)
Reinforced.Typings支持此功能。
使用属性
[TsClass]
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
public class Configuration
{
public static void Configure(ConfigurationBuilder builder)
{
builder
.ExportAsClass<Person>()
.WithPublicProperties();
}
}
将生成以下输出文件:
namespace MyApp {
export class User
{
public FirstName: string;
public LastName : string;
}
}
答案 2 :(得分:4)
不幸的是,目前不支持此方案。
我从来没有错过这样的功能,因为课程通常有一些方法,所以它对我没有意义。但是随意摆弄源代码('TsGenerator.cs'),如果你不需要类中的任何方法,那么生成类而不是接口应该不会太难。
答案 3 :(得分:0)
扩展@Flores'上面的答案,在最新版本的TypeLite(现在为1.8.4)中,您可以修改对ts.Generate(...)的调用,如下所示:
<#= ts.Generate(TsGeneratorOutput.Properties)
.Replace("interface", "export class")
.Replace("declare module", "module") #>
完全变换:
<#@ template debug="false" hostspecific="True" language="C#" #>
<#@ assembly name="$(TargetDir)TypeLite.dll" #>
<#@ assembly name="$(TargetDir)TypeLite.Net4.dll" #>
<#@ assembly name="$(TargetDir)MyAssembly.dll" #>
<#@ import namespace="TypeLite" #>
<#@ import namespace="TypeLite.Net4" #>
<#@output extension=".d.ts"#>
<#@include file="Manager.ttinclude"#>
<# var manager = Manager.Create(Host, GenerationEnvironment); #>
<# var ts = TypeScript.Definitions()
.WithReference("Enums.ts")
.ForLoadedAssemblies();
#>
<#= ts.Generate(TsGeneratorOutput.Properties)
.Replace("interface", "export class")
.Replace("declare module", "module") #>
<# manager.StartNewFile("Enums.ts"); #>
<#= ts.Generate(TsGeneratorOutput.Enums) #>
<# manager.EndBlock(); #>
<# manager.Process(true); #>