Как набрать пересечение двух параметров для назначения третьему

Вы не должны преобразовывать тип IQueryable в IEnumerable и вызывать Include, потому что Include не поддерживается типом IEnumerable.

Короче говоря, никогда не вызывайте Include после ToList ]

IQueryable = server side call (SQL)
IEnumerable = client side (loaded in memory)
2
задан slikts 7 March 2019 в 17:25
поделиться

1 ответ

Вот еще один подход, который может немного смущать пользователя функции, потому что ошибка на входе props. Но он гарантирует, что функция не может быть вызвана, если пересечение не работает.

A & B в качестве возвращаемого типа всегда должен быть подклассом Props, так что это не должно быть проблемой (и заставляет компилятор не жаловаться).

export const foo2 = <Props, A, B>(
  props: A & B extends Props ? Props : never,
  a: A,
  b: B,
): A & B => ({ ...a, ...b });

const props = { x: 1, y: 1 };
foo2(props, { x: 1, z: 1 }, { y: 1 }); // Valid
foo2(props, { x: 1 }, {}); // Error
foo2(props, { x: 1, y: 1 }, {}); // Valid
foo2(props, {}, { x: 1, y: 1 }); // Valid
0
ответ дан H.B. 7 March 2019 в 17:25
поделиться
Другие вопросы по тегам:

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