Вложенные классы с Typescript и ServiceStack - PullRequest
1 голос
/ 29 января 2020

Мы используем typescript-ref для создания файла dtos.ts. Проблема в том, что классы ответов содержат вложенные классы с одинаковыми именами. При генерации классов машинописного текста вложенные классы попадают в глобальную область, вызывая ошибку дублирующегося идентификатора

Любая идея, если это можно настроить с помощью typcript-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); }
}  

enter image description here

Ответы [ 2 ]

0 голосов
/ 05 февраля 2020

Использование пространства имен решило бы это, так как машинописный текст объединяет классы и пространства имен, ref 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); }
    }
}
0 голосов
/ 29 января 2020

Не используйте вложенные классы, если вы хотите, чтобы ваши Службы были совместимыми, это функция C#, которая не рекомендуется для DTO, которые вы хотите сделать доступными на разных языках.

В большинстве Добавить поддерживаемые языки ServiceStack Reference они создаются как DTO первого класса в том же пространстве имен, что и другие DTO.

...