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

Where do you use typescript Awaited<T> in async functions?

提问人:MKF 提问时间:9/30/2023 最后编辑:MKF 更新时间:9/30/2023 访问量:40

问:

我正在调用一个异步函数,该函数调用另一个返回 Promise 的函数。

我希望我的最后一个变量是类型。相反,我返回了类型。我读到可以解开它,但我对如何使用它感到困惑。我在什么功能中使用它?返回原始 promise 的函数,还是使用 async/await 语法的函数?完全在别的地方?csvRowscsvRow[]Promise<csvRow[]>Awaited<T>

我希望变量的定义类型: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()

在上面的代码中,有一行 in using ,定义如下:parseFilecsvType

export type csvType = {
  data: csvRow[]
}

我尝试过使用各种功能,但没有运气。这是我稍后尝试在代码中使用变量时遇到的错误:AwaitedcsvRows

“Promise<csvRow[]>”类型的参数不能分配给“csvRow[]”类型的参数。 类型“Promise<csvRow[]>”缺少类型“csvRow[]”中的以下属性:length、pop、push、concat 和 29 more.ts(2345)

TypeScript 异步 async-await

评论

0赞 jcalz 9/30/2023
类型不会影响运行时行为,并且您不能在不使用 .你所做的任何事情都不会改变这一点,所以错误是正确的,是可以预料的。如果你试图弄清楚如何使用异步函数,几乎可以肯定存在一些问题可以解释这一点PromiseawaitthenAwaited<T>

答:

0赞 Jax-p 9/30/2023 #1

您可能正在尝试调用,因为它是异步的。您可以:await

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

要回答您关于如何使用 type 的原始问题...当从函数创建类型时,它会很有帮助。例如:Awaited

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

tsplayground