Angular Интерфейс расширения условно - PullRequest
0 голосов
/ 10 января 2020

У меня есть приведенная ниже структура интерфейса

export interface Details {
    name: string;
    age: number;
    sex: string;
  }

  export interface PersonalDetails extends Details {
salary: number;
  }

, когда я вызываю ее в своем компоненте что-то вроде

  public params: Details = <Details>{};

, если я получаю определенного пользователя, которого я проверяю в ngOnInit () Я хочу, чтобы параметры были экземпляром PersonalDetails, а не Details.

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

Ответы [ 2 ]

0 голосов
/ 11 января 2020

Интерфейсы - это в основном фреймы для определенных c типов, связанных в объект, и вы не инициализируете их как класс, так как у них нет конструктора. Однако вы можете создать объект, объявив ту же структуру, что и ваш интерфейс, например:

personalDetails: PersonalDetails = {name: 'Bob', age: 32, sex: 'Male', salary: 450000}
0 голосов
/ 11 января 2020

Вот мой подход, который использует перегрузку функций:

function getActualParams(params: PersonalDetails): PersonalDetails
function getActualParams(params: Details): Details
function getActualParams(params: PersonalDetails | Details): PersonalDetails | Details {
  if ('salary' in params) {
    return params as PersonalDetails;
  }

  return params;
}

const o1: Details = { name: 'a', age: 18, sex: 'M' };
const r1 = getActualParams(o1); // Details

const o2: PersonalDetails = { name: 'a', age: 18, sex: 'M', salary: 12 }
const r2 = getActualParams(o2);

Детская площадка

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