Как получить вывод типа из Firestore DocumentSnapshot существует - PullRequest
0 голосов
/ 28 января 2019

Вот довольно распространенный сценарий для меня:

type SomeDocument = {
  foo: string;
};

export async function getSomeDocument(): Promise<SomeDocument> {
  const doc = await db
    .collection("some")
    .doc("document")
    .get();

  if (!doc.exists) throw new Error("Missing some document");

  return doc.data();
}

Typescript не позволяет этого, потому что тип возвращаемого значения doc.data () - DocumentSnapshot | undefined.Почему-то я чувствую, что Typescript должен знать, что doc.data () будет возвращать DocumentSnapshot из-за проверки doc.exists, которая предшествовала ему.

Было бы это возможно с использованием правильной аннотации типа в текущемверсия Typescript?

В настоящее время я решаю эту проблему, приводя оператор return с as SomeDocument

1 Ответ

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

Вы уже определили, что именно должны делать - return doc.data() as SomeDocument.TypeScript не позволит одной вещи просто стать другой, которая не является частью ее наследования или реализованных интерфейсов.В этом случае вы должны четко указать тип приведения.Доступ к свойству exists не меняет ситуацию с точки зрения TypeScript.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...