MiiZZo
@MiiZZo
JavaScript, React, NodeJS, Student

Как обязать typescript допускать выполнения кода только в том случае, если два типа строго равны друг другу?

Допустим, есть код такого вида:
class UserModel {
    // Все те поля, что есть у UserDTO 
    password: string;
} // Модель User в БД. 

class UserDTO {
    email: string;
}

const getUser = async (email: string): Promise<UserDTO> => {
     const user = await db.find(email); // Тип возращаемого объекта является UserModel

      return user; // UserModel не эквивалентен UserDTO, но TypeScript не считает это ошибкой.
}


Как не допустить того, чтобы typescript позволял возвращать в качестве UserDTO эквивалентный этому типу объект, за исключением того, что у этого объекта есть так же дополнительные поля, не описанные в UserDTO.
  • Вопрос задан
  • 89 просмотров
Решения вопроса 2
Aetae
@Aetae Куратор тега TypeScript
Тлен
Ответ: не использовать typescript.
Структурная типизация - суть typescript. Ты можешь нагугуглить всякие мерзкие костыли, но они не панацея и подведут в самый ответственный момент.
Ответ написан
Lynn
@Lynn
nginx, js, css
Самый простой способ — сделать типы неравными. Например так:
class UserModel {
    email: string;
    password: string;
}

class UserDTO {
    protected __guard: never; // добавляем фиктивное поле
    email: string;
}

const getUser = async (email: string): Promise<UserDTO> => {
  const user = await db.find(email);
  return user; // Ошибка, как заказывали
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы