1

我们正在使用typescript -ref来生成 dtos.ts 文件。问题是响应类包含具有相同名称的嵌套类。生成打字稿类时,嵌套类最终在全局范围内,导致重复标识符错误

任何想法是否可以使用 typescript-ref 进行配置,以便这些嵌套类不会在全局范围内结束。

C#

public class FirstResponse
{
    public string Result { get; set; }
    public Person Teacher { get; set; } = new Person();

    public class Person
    {
        public string Name { get; set; }
    }
}

public class SecondResponse
{
  public string Result { get; set; }
  public Person Teacher { get; set; } = new Person();

  public class Person
  {
    public int Id { get; set; }
  }
}

打字稿

...

export class Person
{
    public Name: string;

    public constructor(init?: Partial<Person>) { (Object as any).assign(this, init); }
}

export class Person
{
    public Id: number;

    public constructor(init?: Partial<Person>) { (Object as any).assign(this, init); }
}

export class FirstResponse
{
    public Result: string;
    public Student: Person;

    public constructor(init?: Partial<FirstResponse>) { (Object as any).assign(this, init); }
}

export class SecondResponse
{
    public Result: string;
    public Teacher: Person;

    public constructor(init?: Partial<SecondResponse>) { (Object as any).assign(this, init); }
}  

在此处输入图像描述

4

2 回答 2

0

使用命名空间会解决它,因为打字稿合并类和命名空间,参考 https://www.typescriptlang.org/docs/handbook/declaration-merging.html#merging-namespaces-with-classes

export class FirstResponse
{
    Result: string;
    Teacher: FirstResponse.Person;

    public constructor(init?: Partial<FirstResponse>) { (Object as any).assign(this, init); }
}

export namespace FirstResponse {
    export class Person {
        Name: string;

        public constructor(init?: Partial<Person>) { (Object as any).assign(this, init); }
    }
}

export class SecondResponse {
    Result: string;
    Teacher: SecondResponse.Person;

    public constructor(init?: Partial<SecondResponse>) { (Object as any).assign(this, init); }
}

export namespace SecondResponse {
    export class Person {
        Id: number;

        public constructor(init?: Partial<Person>) { (Object as any).assign(this, init); }
    }
}
于 2020-02-04T21:15:17.673 回答
0

如果您希望您的服务可互操作,请不要使用嵌套类,它们是 C# 功能,不推荐用于您希望以不同语言提供的 DTO。

在大多数Add ServiceStack Reference 支持的语言中,它们在与其他 DTO 相同的命名空间中作为第一类 DTO 生成。

于 2020-01-29T08:59:29.573 回答