#typescript
#typescript
Вопрос:
У меня есть приведенный ниже код в typescript. В теле функции я хотел бы проверить key
, существует ли каждый event
из них в типе T
. Как я могу это сделать в typescript
?
export const convert = <T>(event: { [key: string]: any }) => {
// how can I check whether each key in event exists in type T
}
В этой функции я хотел бы сохранить таблицу event
в Postgresql, поэтому я хотел бы отфильтровать поля, которых нет в столбцах таблицы.
Если T
удаляется после компиляции, могу ли я использовать a class
для этого?
Как и в приведенном ниже классе, он сопоставляется столбцам таблицы базы данных. Могу ли я отфильтровать поля в на event
основе полей, объявленных в этом классе?
class Entity {
@column()
id!: string;
@column
name? : string;
Комментарии:
1. Вы не можете, потому что типы удаляются во время компиляции (нет информации о
T
существовании во время выполнения)2. Что именно вы хотите? Что вы хотите получить в результате этой проверки? Введите или чтобы иметь возможность переносить код в это условие?
3. Даже в случае ключей класса они не будут частью prototype, и вы не сможете запросить их
Ответ №1:
рассмотрите следующее, но event
оно также должно быть введено
export const convert = <T extends Record<string, unknown>>(event: Record<keyof T, unknown>) => {
Комментарии:
1.
event
передается из шлюза API через http. Поэтому у меня нет способа ограничить тип для этого. Если событие имеет полей больше, чемT
имеет, оно будет включать эти ненужные поля, верно?2. в этом случае typescript вам не поможет. во время выполнения нет typescript, он компилируется в чистый js. итак, вам нужно реализовать логику выполнения.