Как добавить ограничение типа для сопоставленного типа? - PullRequest
0 голосов
/ 27 февраля 2020

Я пытаюсь добавить больше типов в Система запросов MongoDB .

У меня есть объект

interface Person { name: string; age: number }

Я хочу создать объект запроса, который позволяет оператор $gt только для поля age, поскольку это число, а не поле name.

{ age: { $gt: 21 } } будет действительным, но не { name: { $gt: 21 } }

Что-то вроде

type MongoConditions<T> = {
    [P in keyof T]?: T[P] |
    { $gt: number }; // This condition should be allowed only if T[P] is a number
};

Так что это должно быть разрешено

const condition: MongoConditions<Person> = {
    age: { $gt: 21 },
    name: 'foo'
}

Но это должно провалиться при компиляции:

const condition3: MongoConditions<Person> = {
    age: 21,
    name: { $gt: 21 }
}

1 Ответ

1 голос
/ 27 февраля 2020

Вы можете использовать условный тип , чтобы разрешить оператор запроса только в поле «число»:

type MongoConditions<T> = {
    [P in keyof T]?: T[P] extends number ? (T[P] | { $gt: number }) : T[P];
};

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

...