Тип возвращаемого значения Typescript Интерфейс имеет дополнительные поля

Я хочу получить данные из базы данных и вернуть их, как определено в интерфейсе (т.е. только значения, соответствующие интерфейсу). я написал следующие коды

// get data from databae - db.find() 
async getCustomerList(): Promise<CustomerInfoInterface[]> {
  const customerList = await db.find();
  return customerList;
}

А ТАКЖЕ

export interface CustomerInfoInterface {
  firstName: string;
  lastName: string;
  phone: string;
  address?: string;
  birthDate?: Date;
  data?: object;
}

Когда я вызвал функцию, я получаю

[
    {
        "customerId": "5d63b80ce186984f50617c95",
        "phone": "+9475588752",
        "firstName": "Jhon",
        "lastName": "Doe",
        "address": "No. 1, Some Rd, Somewhere",
        "birthDate": "1990-01-01",
        "data": {},
        "secret1": "a-efw53.0",
        "secret2": "b-45300"
    },
    {
        ...
]

Но я ожидаю получить ответ, точно соответствующий интерфейсу. (ошибка, если меньше или отфильтровать больше). В чем тут проблема и как это реализуется с помощью интерфейсов?

ps: я знаю, что могу сделать то же самое, вручную сопоставив каждое значение, но намерение здесь - использовать Interfaces.

Я работаю над Loopback 4 на Ubuntu (TypeScript)


person Salitha    schedule 29.08.2019    source источник


Ответы (1)


Это невозможно сделать только с Interfaces. Это информация о времени компиляции. В среде выполнения нет интерфейсов. Чтобы достичь того, что вы хотите, должны быть физические значения, доступные для сопоставления. Например. массив имён реквизитов. И вы должны сделать это самостоятельно (или использовать библиотеки, такие как lodash), чтобы отфильтровать только необходимые реквизиты.

person Vitaly    schedule 29.08.2019