flowtype 不能 return 对象字面量,因为对象类型不兼容
flowtype cannot return object literal because object type is incompatible
我有以下类型:
export type Transaction = {
amount: number,
description: string
}
export type TransactionsForMonth = {
month: number,
year: number,
transactions: Array<Transaction>
}
export type TransactionsGroupedByDay = Array<{
date: string,
transactionsForDay: Array<Transaction>
}>
export type TransactionsForMonthGroupedByDay = {
month: number,
year: number,
transactionsForMonth: Array<TransactionsGroupedByDay>,
}
我创建了一个从 TransactionsForMonth
转换为 TransactionsForMonthGroupedByDay
的函数,方法是减少交易并将它们分类为天数:
transactionsGroupedByDay ({ month, year, transactions }: TransactionsForMonth): TransactionsForMonthGroupedByDay {
// transactions are already sorted in date order
const transactionsGroupedByDay: TransactionsGroupedByDay = transactions.reduce((transactionsGroupedByDay, transaction) => {
const thisDay = transactionsGroupedByDay.find(({ date }) => date === transaction.transactionDate)
const transactionsThisDay = thisDay ? [...thisDay.transactionsForDay, transaction] : [transaction]
return [
...transactionsGroupedByDay.filter(({ date }) => date !== transaction.transactionDate),
{
date: transaction.transactionDate,
transactionsForDay: transactionsThisDay
}
]
}, [])
return {
month,
year,
transactionsForMonth: transactionsGroupedByDay
}
}
当我 运行 流过这个函数时,我得到以下错误:
Cannot return object literal because object type [1] is incompatible with TransactionsGroupedByDay [2] in array element
of property transactionsForMonth. [incompatible-return]
src/api/services/TransactionService.js
55│ return {
56│ month,
57│ year,
58│ transactionsForMonth: transactionsGroupedByDay
59│ }
60│ }
61│
src/api/types.js
[1] 35│ export type TransactionsGroupedByDay = Array<{
36│ date: string,
37│ transactionsForDay: Array<Transaction>
38│ }>
:
[2] 43│ transactionsForMonth: Array<TransactionsGroupedByDay>,
我是 flowtype 的新手,想知道这个错误是什么意思?
错误基本上是说,该函数应该 return 给定类型结构的对象,但是您的 return 语句不满足该要求。
原因是因为在 type TransactionsForMonthGroupedByDay
中你已经声明 属性 transactionsForMonth
是一个 TransactionsGroupedByDay
的数组但是你实际传递给 transactionsForMonth
你已经声明为 const transactionsGroupedByDay: TransactionsGroupedByDay
这是不兼容的。
您可以通过修复您的类型以接受单个 TransactionsGroupedByDay
或您的变量声明需要 return 一个 TransactionsGroupedByDay
.
数组来解决此问题
我有以下类型:
export type Transaction = {
amount: number,
description: string
}
export type TransactionsForMonth = {
month: number,
year: number,
transactions: Array<Transaction>
}
export type TransactionsGroupedByDay = Array<{
date: string,
transactionsForDay: Array<Transaction>
}>
export type TransactionsForMonthGroupedByDay = {
month: number,
year: number,
transactionsForMonth: Array<TransactionsGroupedByDay>,
}
我创建了一个从 TransactionsForMonth
转换为 TransactionsForMonthGroupedByDay
的函数,方法是减少交易并将它们分类为天数:
transactionsGroupedByDay ({ month, year, transactions }: TransactionsForMonth): TransactionsForMonthGroupedByDay {
// transactions are already sorted in date order
const transactionsGroupedByDay: TransactionsGroupedByDay = transactions.reduce((transactionsGroupedByDay, transaction) => {
const thisDay = transactionsGroupedByDay.find(({ date }) => date === transaction.transactionDate)
const transactionsThisDay = thisDay ? [...thisDay.transactionsForDay, transaction] : [transaction]
return [
...transactionsGroupedByDay.filter(({ date }) => date !== transaction.transactionDate),
{
date: transaction.transactionDate,
transactionsForDay: transactionsThisDay
}
]
}, [])
return {
month,
year,
transactionsForMonth: transactionsGroupedByDay
}
}
当我 运行 流过这个函数时,我得到以下错误:
Cannot return object literal because object type [1] is incompatible with TransactionsGroupedByDay [2] in array element
of property transactionsForMonth. [incompatible-return]
src/api/services/TransactionService.js
55│ return {
56│ month,
57│ year,
58│ transactionsForMonth: transactionsGroupedByDay
59│ }
60│ }
61│
src/api/types.js
[1] 35│ export type TransactionsGroupedByDay = Array<{
36│ date: string,
37│ transactionsForDay: Array<Transaction>
38│ }>
:
[2] 43│ transactionsForMonth: Array<TransactionsGroupedByDay>,
我是 flowtype 的新手,想知道这个错误是什么意思?
错误基本上是说,该函数应该 return 给定类型结构的对象,但是您的 return 语句不满足该要求。
原因是因为在 type TransactionsForMonthGroupedByDay
中你已经声明 属性 transactionsForMonth
是一个 TransactionsGroupedByDay
的数组但是你实际传递给 transactionsForMonth
你已经声明为 const transactionsGroupedByDay: TransactionsGroupedByDay
这是不兼容的。
您可以通过修复您的类型以接受单个 TransactionsGroupedByDay
或您的变量声明需要 return 一个 TransactionsGroupedByDay
.