首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >打字稿通用,怎么写?

打字稿通用,怎么写?
EN

Stack Overflow用户
提问于 2022-01-07 19:15:17
回答 1查看 49关注 0票数 -1

我有一个函数可以从Firebase中的DB获取所有文档--函数本身可以用于检索任何类型的文档,这就是为什么我需要指定它用泛型返回的内容。

我现在正在做这个:

代码语言:javascript
复制
export const getAllDocuments = async <DocType>(collectionName: string) => {
  const documents: DocType[] = [];
  const querySnapshot = await getDocs(collection(db, collectionName));
  querySnapshot.forEach((doc) => {
    documents.push({
      id: doc.id,
      ...doc.data(),
    });
  });

  return documents;
};

但是我得到了这个错误:"TS2345:类型'{ id: string;}‘的参数不能分配给'DocType’类型的参数。‘DocType’可以用与'{ id: string;}‘无关的任意类型实例化?“?

我这样调用这个函数:

代码语言:javascript
复制
const documents = await getAllDocuments<ExerciseDocument>('exercises');

我在这里做错了什么?)

参见这里的测试示例:https://www.typescriptlang.org/play?target=8&jsx=0#code/MYewdgzgLgBAhgJwXAnjAvDA2gWAFAwwDe+hhAlgCYBcMAjKTAL4A0jJBZVtATI0-gC6+fKEiwA5gFMoAQQA28gCIhgAVwC2UsFAgZ4EFGGAwAPABUAfAApEE2tATkwEgJQZLxRmOgxKqzW1dWnMsQX0wgG5GRGQUADoAMxAEAFE4YAALa2t3dE8OMj8ArR0IeIAHNQhswqKYbhgAcjoeAGYmxkImV2jOHr7GBBk1BDBi9VLdPqZBvCA

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-07 20:34:14

你可以试试

代码语言:javascript
复制
const getAllDocuments = async <T extends { id: string }>(arg: string) => {
  const documents: T[] = [];
  array.forEach(() => {
    documents.push({
      id: '123'
    } as T);
  });

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

https://stackoverflow.com/questions/70626090

复制
相关文章

相似问题

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