背景:我正在使用Vue并与云功能交互,以便从firestore中检索数据(我不是直接查询firestore(。我正在调用一个函数,其中一个字段返回firestore的时间戳(秒,纳秒(的内部表示。此外,我对打字/Vue完全陌生,所以如果我遗漏了一些明显的东西,我很抱歉。
我定义了这样一个模型类:
<script lang="ts">
interface Order {
order_id: number
uid: string
create_date: Date //{ _seconds: number; _nanoseconds: number } ... from Firestore timestamp
}
export default Vue.extend({
data() {
return {
userOrderInfo: [] as Order[],
}
},
methods: {
getUserOrders() {
userOrders({ uid: this.$store.state.uid })
.then(result => {
const orderList: Order[] = JSON.parse(JSON.stringify(result.data))
const filteredOrders: Order[] = []
orderList.forEach(o => {
filteredOrders.push(o)
const tempCreateDate = new firebase.firestore.Timestamp(
o.create_date._seconds,
o.create_date._nanoseconds,
o.create_date = tempCreateDate.toDate()
}
})
我在解析和存储create_date时遇到了问题。
- 这对我来说很难看,我觉得可能有一种更优雅的方法来获得它。必须获得纳秒和秒,然后重新创建时间戳来调用toDate((,这似乎很粗糙
- VSCode给了我这个错误,但一切似乎都运行得很好。";类型"Date"上不存在属性"_seconds"。Vetur(2339(">它不喜欢我在data((定义中定义_seconds和_nanoconds的方式
有更好的方法来定义我的日期并检索它吗?
- o.create_date=tempCreateDate.toDate((向我发出以下警告:标识符"create_date"不在camel中case.eslint@typescript-eslint/camelcase问题是cloud函数以这种格式返回create_date,所以我不能将其设为camelcase
除了忍受这个警告之外,还有什么解决方案吗?
我只讨论Typescript部分,因为我没有使用过Firebase,也不知道如何重构Firebase的结果。
如果您的create_date
具有以下结构:
{
_seconds: number;
_nanoseconds: number;
}
您可以将其定义为CCD_ 2。
<script lang="ts">
interface Order {
order_id: number;
uid: string;
create_date: ResponseDate;
}
// please choose a more fitting name :)
interface ResponseDate {
_seconds: number;
_nanoseconds: number;
}
这应该可以消除你的VSCode TypeScript错误,因为TypeScript现在正确地理解了create_date
是什么。
现在,如果以后要将o.create_date
更新为实际的Date
,则需要将其添加到接口定义中。
<script lang="ts">
interface Order {
order_id: number;
uid: string;
create_date: ResponseDate | Date; // Can be a ResponseDate or a Date
}
interface ResponseDate {
_seconds: number;
_nanoseconds: number;
}