Typelite POCO Class Generation

时间:2014-10-07 14:30:38

标签: typescript typelite

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
};

4 个答案:

答案 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; }
}

fluent call

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); #>