首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何映射定义为FieldValue的Fi还原数组值

如何映射定义为FieldValue的Fi还原数组值
EN

Stack Overflow用户
提问于 2019-11-10 23:55:57
回答 1查看 231关注 0票数 0

对于如何在TypeScript接口中为Firestore文档定义数组值,同时也利用了FieldValue.arrayUnion(),我有些犹豫。依赖关系: TypeScript 3.7.2和@google/Firesto2.6.0。

即。该接口包括一个“成员”键,它是一个字符串数组:

代码语言:javascript
复制
import * as firestore from "@google-cloud/firestore";

interface SomeDoc {
  members: string[] | firestore.FieldValue;
}

const foo: SomeDoc = {
  members: ["s"]
};

const bar = foo.members.includes("s") ? "does include" : "does not include";

我可以使用Firestore的FieldValue arrayUnion()和arrayRemove()方法成功地更新这个值,这是很棒的。但是,TypeScript引发以下类型错误:

代码语言:javascript
复制
TypeScript error:
Property 'includes' does not exist on type 'string[] | FieldValue'.
  Property 'includes' does not exist on type 'FieldValue'.  TS2339

有人对如何最好地定义这种价值有任何提示吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-11 04:13:32

TypeScript允许您指定联合中给定的任何类型,但它不允许您在不首先使用类型保护以区分类型的情况下读取其中一种类型。这一节说:

您只能访问保证属于工会类型的所有成员的成员。

因此,根据您的定义,您可以通过这样的保护来满足TS:

代码语言:javascript
复制
const bar = (foo.members as string[]).includes("s") ? "does include" : "does not include";

请注意,如果您保护的不是实际的基础类型,这可能会导致运行时错误。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58794042

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档