【FireStore】getDocsで取得したデータに型定義する方法
解決したいこと
getDocsの型定義をしたいです。型の定義方法を教えてください。
発生している問題・エラー
出ているエラーメッセージを入力
(parameter) doc: QueryDocumentSnapshot<DocumentData>
Argument of type '{ id: string; }' is not assignable to parameter of type 'Book'.
Type '{ id: string; }' is missing the following properties from type 'Book': title, author
該当するソースコード
import { db } from "./config";
import { collection, getDocs} from "firebase/firestore";
type Book = {
title:string;
author:string;
id:string;
}
export const getAllDocData = async() => {
const colRef = collection(db,"books");
const querySnapshot = await getDocs(colRef);
let books:Book[]= [];
querySnapshot.docs.forEach((doc)=>books.push({...doc.data(),id:doc.id}));
console.log(books);
}
自分で試したこと
型定義を次のようにしたらエラー消えましたが、無理やり型定義をしている感じがします。
// post.types.ts
export type Books = Book[] & Id[]
type Book = {
title:string;
author:string;
}
type Id = {
id:string;
}
// post.ts
import { db } from "./config";
import { collection, getDocs} from "firebase/firestore";
import { Books } from "./types/post.types";
export const getAllDocData = async() => {
const colRef = collection(db,"books");
const querySnapshot = await getDocs(colRef);
let books:Books = [];
querySnapshot.docs.forEach((doc)=>books.push({...doc.data(),id:doc.id}));
console.log(books);
}
また、次のように書くとエラーになる原因がわかりません。ご存知の方がいらっしゃればご教示いただけますと幸いです。
// post.types.ts
- export type Books = Book[] & Id[]
+ export type Books = Book & Id
type Book = {
title:string;
author:string;
}
type Id = {
id:string;
}
// post.ts
import { db } from "./config";
import { collection, getDocs} from "firebase/firestore";
import { Books } from "./types/post.types";
export const getAllDocData = async() => {
const colRef = collection(db,"books");
const querySnapshot = await getDocs(colRef);
- let books:Books = [];
+ let books:Books[] = [];
querySnapshot.docs.forEach((doc)=>books.push({...doc.data(),id:doc.id}));
console.log(books);
}