我正在调用一个异步函数,该函数又调用另一个返回 Promise 的函数。
我希望我的最终变量
csvRows
是 csvRow[]
类型。相反,我得到的是 Promise<csvRow[]>
类型的返回。我读到 Awaited<T>
可以解开这个,但我对如何使用它感到困惑。我在什么功能中使用它?返回原始 Promise 的函数,还是使用 async/await 语法的函数?完全在其他地方吗?
我希望变量
csvRows
的定义类型为:
export type csvRow = { [level: string]: string }
导致问题的代码:
const parseFile = (file) => {
return new Promise<csvRow[]>((resolve, reject) => {
Papa.parse(file, {
header: true,
delimter: ',',
download: true,
skipEmptyLines: true,
complete: (a: csvType) => {
resolve(a.data)
},
error(err) {
reject(err)
}
})
})
}
export const useTimeSeriesData = async (): Promise<csvRow[]> => {
let csvRows = await parseFile('/path/to/file')
return csvRows
}
const csvRows = useTimeSeriesData()
在上面的代码中,
parseFile
中有一行使用csvType
,其定义如下:
export type csvType = {
data: csvRow[]
}
我尝试在各种功能中使用
Awaited
,但没有运气。这是我稍后在代码中尝试使用 csvRows
变量时遇到的错误:
“Promise
”类型的参数不可分配给“csvRow[]”类型的参数。 类型“Promise ”缺少类型“csvRow[]”中的以下属性:length、pop、push、concat 和 29 more.ts(2345)
您可能正在尝试
await
调用,因为它是异步的。你可以:
const csvRows: csvRow[] = await useTimeSeriesData();
回答关于如何使用
Awaited
类型的原始问题...从函数创建类型时它会很有帮助。例如:
type CsvRowsReturnType = ReturnType<typeof useTimeSeriesData>; // Promise<csvRow[]>
type CsvRowsType = Awaited<CsvRowsReturnType>; // csvRow[]