вызов метода с параметром типа class и проверкой типа класса - PullRequest
0 голосов
/ 18 февраля 2020

У меня есть следующие классы:

class Permission {
  name: string;
}

class EditBasketPermission extends Permission {
  basketId: number;
}

class EditProductPermission extends Permission {
  basketId: number;
  projectId: number;
}

Затем у меня есть метод, который разрешает или нет разрешение:

authorize(permission: Permission) : boolean {

  // 1 - Check the permission type
  // 2 - Authorize the request based on the permission data

}

Как проверить тип разрешения, чтобы я мог решить, как его оценить?

И в моем HTML у меня есть следующее:

<button *ngIf="authorize(???)">Edit</button>

Как передать EditProductPermission при вызове авторизованного метода?

Проблема в том, что тип разрешения имеет разные типы входов.

Ответы [ 2 ]

2 голосов
/ 18 февраля 2020

Существует несколько способов go об этом.

  1. Вы можете использовать JavaScript s instanceof оператор для определения типа объекта, который вам дан.

  2. Вы можете добавить свойство permissionType (может быть, строку или перечисление?) и ожидать, что каждый расширяющий класс будет возвращать какое-то соответствующее значение для переключения on.

  3. Если форма каждого типа разрешения достаточна, чтобы сказать вам, какой это тип, вы можете проверить наличие таких элементов, как basketId и projectId, чтобы вывести к какому типу вы обращаетесь.

Typescript имеет охранников типа , которые могут основываться на instanceof или ваших собственных пользовательских логиках c, что позволяет вам иметь переменные строго типизируйте, как только вы определили, что они относятся к данному типу.

Наконец, в зависимости от вашей архитектуры, возможно, стоит подумать об использовании объектно-ориентированного подхода, связав авторизацию logi c с сам класс разрешений, поэтому вместо вызова authorize(permission) Вы бы позвонили permission.authorize().

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

Может быть, такой подход?

authorize(permission: Permission) : boolean {

  // 1 - Check the permission type
  // 2 - Authorize the request based on the permission data

  const props = []
  for (const key in permission) {
    if (permission.hasOwnProperty(key)) {
      props.push[key]
  }
  // props is now an array of the specialised permission object keys

}

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