Попытка создать Подтип с полями только определенного типа, затем получить создание типа, который является ключом этого подтипа. - PullRequest
0 голосов
/ 20 января 2019

Я пытаюсь создать подтип (ST) универсального типа I, который обеспечивает использование этого подтипа (ST) объекта с подмножеством полей из этого I, общего сопределенный тип DocumentReference.

пример:

type SubType<Base, Condition> = Pick<
  Base,
  { [Key in keyof Base]: Base[Key] extends Condition ? Key : never }[keyof Base]
>;

  private joinOnField<
    I,
    J,
    K extends keyof ST,
    ST = SubType<I, DocumentReference>
  >(data: ST, docRefField: K): Observable<J> {
    if (!data[docRefField]) {
      return of(null);
    }

    if ((<DocumentReference>data[docRefField]).get) {
      return of(null);
    }

    return from(data[docRefField].get().then(snap => snap.data() as J));
  }

Я получаю сообщение об ошибке: 1011 *

Преобразование типа 'ST [K]' вТип «DocumentReference» может быть ошибкой, поскольку ни один тип не совпадает с другим.Если это было сделано намеренно, сначала преобразуйте выражение в «неизвестное».

Мне показалось, что я довольно явно сказал, что в ST есть только поля типа DocumentReference

Любая помощь приветствуется!

1 Ответ

0 голосов
/ 21 января 2019

Компилятор не может следовать таким условиям, пока у условного типа все еще есть такие неразрешенные параметры типа (например, внутри универсальной функции).

Вы должны следовать совету компилятора и использовать двойное утверждение data[docRefField] as unknown as DocumentReference

...