l oop по сравнению с собственными свойствами в базовом классе в typecipt - PullRequest
2 голосов
/ 17 июня 2020

Я пытаюсь разработать алгоритм проверки для сложной модели данных в Typescript. В упрощенной форме я придумал такую ​​модель класса:

export abstract class Validatable {

    protected errors: string[];

    isValid(): boolean {
        let result = true;
        for each property (which may or may not be an array) in this instance which extends Validatable {
            if (Array(property)) {
                if (!property.every(item=>item.isValid()) {
                    return false;
                }
            } else {
                if (!property.isValid()) {
                    return false;
                }
            }
        }

        return this.errors.length === 0;
    }
}

export class B extends Validatable{
    name: string;
}

export class A extends Validatable{
    name: string;
    Bs: B[];
}

Мне сложно понять, как настроить цикл по свойствам (строка 'для каждого свойства). Или, если это вообще возможно.

Идея состоит в том, чтобы вызвать isValid для экземпляра класса A, который, в свою очередь, вызовет isValid для всех составляющих свойств вместо повторения практически одного и того же кода в каждом классе.

Ответы [ 2 ]

1 голос
/ 17 июня 2020

Вы можете использовать функцию isArray (), чтобы проверить, является ли свойство массивом.

Например:

isArray ([1,2,3]) // возвращает true

isArray (123) // возвращает false

0 голосов
/ 17 июня 2020

properties будет содержать список всех свойств класса. Вы можете использовать их для создания своего logi c проверки или чего угодно.

class Validatable {

  name: string = "Siraj";
  nums: number[] = [1, 2, 3]

  isValid () :boolean {
    const properties:string[] = Object.getOwnPropertyNames(this);
    console.log(properties);
    return true;  
  }


}

class A extends Validatable {
  hello = "Greet"
}

let a = new A();

a.isValid();
// logs ["name", "nums", "hello"]

Playground Link

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...