2014-02-14 154 views
1

我想生成外部模块,而不是一个类型定义文件。我相信我需要执行以下操作:TypeLite生成外部模块?

  1. 将文件的扩展名更改为.ts而不是.d.ts。
  2. 每个模块生成一个文件。
  3. 在每个界面和枚举前添加关键词“导出”。

我可以非常容易地通过改变“输出扩展”在TT文件设置更改文件的扩展名。

我不知道如何将模块拆分为单独的文件。

我想不出如何将导出关键字添加到每个接口。

回答

0

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

export无需更改库的源代码即可添加关键字(TsGenerator.cs)。这是非常具体的要求,所以我可能不会将它添加到库中。

+5

我说我需要我自己用的功能,并取得了[拉请求(https://bitbucket.org/LukasKabrt/typelite/pull-request/9/support-for-file-per -module)。 – DogSpots

+1

我试过使用ToModules,我绝对可以使用一些示例/文档。 –

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