强制类型(TypeScript)在使用As键时不被尊重

  • 本文关键字:As 类型 TypeScript typescript
  • 更新时间 :
  • 英文 :


我正在解析CSV,并希望将行转换为对象。它看起来像这样:

function dataToObjects<T extends SomeBasicObjectType>(data: string[][]): T[] {
const [rawHeaders, ...rows] = data
const headers = rawHeaders as Array<keyof T>
const dataAsObjects = rows.map((row) => {
const dataObject = Partial<T> = {}
row.forEach((dataPoint, idx) => {
// TypeScript is fine with this next line
const header = headers[idx] as keyof T
if (!header) {
// throw some error
}
// Below presents the type error: Type 'string' is not assignable to type 'T[keyof T]'
dataObject[header] = dataPoint
})
return dataObject
})
return dataAsObjects
}

试图保持示例代码尽可能简单(并包括错误点作为注释),所以请原谅我,如果它不是很完美。正如你可能会说的,这个样本也是来自我试图尽可能多地解决问题(即。

你可以像在TypeScript Playground上一样尝试这段代码(我相信它就是这样)来查看错误。

OP解决方案

对于如何最恰当地解决这个问题,我当然愿意听取意见。检查DB客户端如何转换查询的结果,而TS同样无法确认结果是预期的类型。

同时,满足以下条件:

row.forEach((dataPoint, idx) => {
const header = headers[idx]
if (!header) {
// throw some error
}
dataObject[header] = dataPoint
})
// Cast to `unknown` prior to casting as `T`
return dataObject as unknown as T

不相信这是理想的足够,但它在紧要关头工作。

相关内容

  • 没有找到相关文章

最新更新