typescript - 获取地图返回对象的类型。打字稿 ts(2345)
问题描述
我有一个使用该any
类型的代码,请检查注释//HERE TYPE ANY
:我需要它才能将数据推送到该数组中,因为您可以在下面的代码中看到该//NEED ANY TYPE TO PUSH INTO THE ARRAY
行。
const ProjectList = () => {
const [projects, setProjects] = useState<IFirebaseProject[]>();
useEffect(() => {
let data:any[] = []; //HERE TYPE ANY
firebase
.firestore()
.collection("projects")
.onSnapshot((snapshot) => {
let changes = snapshot.docChanges();
changes.forEach(change => {console.log(change.doc.data())})
const fbProjects = changes.map( (change) => ({
id: change.doc.id,
...change.doc.data()
}));
fbProjects.forEach(fbProject => data.push(fbProject)) //NEED ANY TYPE TO PUSH INTO THE ARRAY
setProjects([...data]);
});
}, []);
我的问题是我无法为代码的特定部分强制执行类型(尽管我知道):
const fbProjects = changes.map( (change) => ({
id: change.doc.id,
...change.doc.data()
}));
我知道由 获得的类型...change.doc.data()
,但是如何强制执行我的类型,以便fbProjects
满足我定义的确定类型?
这是 的类型fbProjects
:
interface IFirebaseProject {
id: string,
authorFirstName: string,
authorId: string,
authorLastName: string
content: string
createdAt: Date
title: string
}
所以它有 id 属性,我知道它...change.doc.data()
有其余的属性。
如果我使用 myIFirebaseProject
而不是any
我在将项目推送到数组 ( fbProjects.forEach( fbProject => data.push(fbProject))
) 时会出现错误,因为显然不符合类型。
我得到的错误是:
Argument of type '{ id: string; }' is not assignable to parameter of type 'IFirebaseProject'. Type '{ id: string; }' is missing the following properties from type 'IFirebaseProject': authorFirstName, authorId, authorLastName, content, and 2 more.ts(2345)
编辑:控制台输出:
(使用 记录的数据库中每个寄存器的其中一个对象.forEach
)
解决方案
您可以告诉 TypeScript 将返回的对象map
视为IFirebaseProject
:
const fbProjects = changes.map((change) => ({
id: change.doc.id,
...change.doc.data()
}) as IFirebaseProject);
推荐阅读
- reactjs - 如何在 onChange 后清除 Material-ui 中的自动完成输入?
- powershell - PowerShell 导出不在特定组中的 AD 用户 + 属性
- c++ - 如何更改包含二维数组c ++的最高值和最低值的列
- python - 在我通过在 GUI 上点击“x”关闭 opencv 图像窗口后,终端冻结
- azure - 多域通配符 SSL 映射多个 Azure 应用服务应用
- vala - 如何克服有关 functioni 参数在 vala 中为 const 的警告?
- javascript - React:检测多个组件外的点击
- asp.net - 如何在 asp.net 中使用 gmail api
- flutter - 如何知道文本中每一行的字符串长度?
- windows - 使用 Powershell 运行 .bat 脚本时避免“不被识别为内部或外部命令”