在异步函数中哪里使用 typescript Awaited<T>?

问题描述 投票:0回答:1

我正在调用一个异步函数,该函数又调用另一个返回 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)

typescript asynchronous async-await
1个回答
0
投票

您可能正在尝试

await
调用,因为它是异步的。你可以:

const csvRows: csvRow[] = await useTimeSeriesData();

回答关于如何使用

Awaited
类型的原始问题...从函数创建类型时它会很有帮助。例如:

type CsvRowsReturnType = ReturnType<typeof useTimeSeriesData>; // Promise<csvRow[]>
type CsvRowsType = Awaited<CsvRowsReturnType>; // csvRow[]

ts游乐场

© www.soinside.com 2019 - 2024. All rights reserved.