reflection - Typelite:如何使用 T4 转换将可为空的 C# 类型设置为可为空的 Typescript 类型?

标签 reflection typescript t4 system.reflection typelite

我正在使用 Typelite 9.5.0 将我的 C# 类转换为 Typescript 接口(interface)。我希望将可空类型(例如 Guid?)转换为 Typescript 中的可空类型。

目前我有这个 C# 类:

public class PersistentClassesReferences
{
public Guid? EmailMessageId { get; set; }
public Guid? FileMetaDataId { get; set; }
public Guid? IssueId { get; set; }
public Guid? ProjectId { get; set; }
}

但是这是用 Typelite 转换成这个 Typescript 接口(interface)的:

interface IPersistentClassesReferences {
    EmailMessageId : System.IGuid;
    FileMetaDataId : System.IGuid;
    IssueId : System.IGuid;
    ProjectId : System.IGuid;
}

但是当我想从这个接口(interface)创建一个新的 typescript 变量时,编译器会在我没有设置所有属性(某些值为空)时提示。

因此我有一个模板来测试可空类型,如果是的话添加一个?

var isNullabe = Nullable.GetUnderlyingType(tsprop.ClrProperty.PropertyType) != null;
if (isNullabe)
{
    return identifier.Name + "? ";
}

这确实有效,但不再有效(我认为在升级到 Typelite 9.5.0 或其他一些 nugetpackage 更新之后)。

我收到错误信息:

 Compiling transformation: 'System.Reflection.MemberInfo' does not contain a
 definition for 'PropertyType' and no extension method 'PropertyType' accepting
 a first argument of type 'System.Reflection.MemberInfo' could be found (are you
 missing a using directive or an assembly reference?)           

如何在标识符名称中添加问号?

最佳答案

您可以使用 TsProperty 属性创建它,例如,以下 C# 代码将产生一个可选属性:

[TsClass]
public class Person
{
    [TsProperty(IsOptional=true)]
    public string Name { get; set; }
    public List<Address> Addresses { get; set; }
}

这将生成以下 TypeScript 定义

interface Person {
    Name?: string;
    Addresses: TypeScriptHTMLApp1.Address[];
}

您可以在这里找到更多相关信息:docs

在此处查看代码:code

关于reflection - Typelite:如何使用 T4 转换将可为空的 C# 类型设置为可为空的 Typescript 类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26053460/

相关文章:

javascript - 使用 typescript 作为自定义数据类型在 Angular 中返回 Promise

asp.net-mvc - 如何从 Views 文件夹中获取 Asp.net MVC 添加 View 对话框?

file - 将 T4 模板输出复制到新文件

java - 使用反射代替长 switch 语句

c# - 要求反射 API 覆盖 System.String.Empty 的含义是什么?

javascript - (): meaning in javascript function

javascript - 如何并行 api 调用并保持列表中响应的顺序以供 ui 呈现(RxJS Observables)

entity-framework-5 - 如何从现有数据库生成 POCO 代理

java - 如何知道java中包的类?

java - 反射获取的方法的执行时间是否更长?