如何定义将从我的云函数加载的typescript接口的日期字段



背景:我正在使用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时遇到了问题。

  1. 这对我来说很难看,我觉得可能有一种更优雅的方法来获得它。必须获得纳秒和秒,然后重新创建时间戳来调用toDate((,这似乎很粗糙
  2. VSCode给了我这个错误,但一切似乎都运行得很好。";类型"Date"上不存在属性"_seconds"。Vetur(2339(">它不喜欢我在data((定义中定义_seconds和_nanoconds的方式

有更好的方法来定义我的日期并检索它吗?

  1. 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;
}

相关内容

  • 没有找到相关文章

最新更新