TypeLite生成外部模块?

时间:2014-02-14 23:11:56

标签: typelite

我正在尝试生成外部模块而不是类型定义文件。我相信我需要做以下事情:

  1. 将文件的扩展名更改为.ts而不是.d.ts。
  2. 每个模块生成一个文件。
  3. 在每个界面前添加关键字“导出”并枚举。
  4. 我可以通过更改tt文件中的“输出扩展名”设置轻松更改文件的扩展名。

    我无法弄清楚如何将模块拆分成单独的文件。

    我无法弄清楚如何将Export关键字添加到每个界面。

2 个答案:

答案 0 :(得分:0)

TypeLITE不支持生成多个文件。多个用户已经请求了此功能,但我不知道从单个tt文件生成多个文件的简单方法。

如果不更改库的源代码(export),则无法添加

TsGenerator.cs关键字。这是非常具体的要求,所以我可能不会将它添加到库中。

答案 1 :(得分:0)

TypeLite是一个很好的项目,但缺乏文档和示例,它是开源的,所以任何人都可以贡献并使其更好。

至于每个类创建一个文件,我使用下面的代码解决了它。

    private static void GenerateTypeScriptContracts(string assemblyFile, string outputPath)
    {
        // Clean TS Folder
        System.IO.DirectoryInfo di = new DirectoryInfo(outputPath);

        foreach (FileInfo file in di.GetFiles())
        {
            file.Delete();
        }
        // --

        var assembly = Assembly.LoadFrom(assemblyFile);

        // If you want a subset of classes from this assembly, filter them here
        var models = assembly.GetTypes();

        foreach (var model in models)
        {
            var generator = new TypeScriptFluent()
                .WithConvertor<Guid>(c => "string")
                .WithMemberFormatter((identifier) => Char.ToLower(identifier.Name[0]) + identifier.Name.Substring(1));

            generator.ModelBuilder.Add(model);

            // Generate TS interface definitions
            var tsClassDefinitions = generator.Generate(TsGeneratorOutput.Properties | TsGeneratorOutput.Fields);
            File.WriteAllText(Path.Combine(outputPath, "I" + model.FullName.Replace("ProjectName.DtoModels.", "") + ".ts"), tsClassDefinitions);
        }
    }