async function fetchMpdData(mpdUrl: string): Promise<MPDFileContainer> {
const data = await fetch(mpdUrl)
.then((response): Promise<string> => response.text())
.catch(
(error): void => {
throw new FetchError(`Error fetching file ${mpdUrl}: ${error}`);
},
);
return parseStringMpd(data);
}
parseStringMpd
带一个字符串。传递给data
的{{1}}失败,
'string |类型的参数无效”不能分配给“字符串”类型的参数。
SO上有一个few other questions,它讨论了如果诺言未通过catch块将如何导致parseStringMpd
属性无效。但是在我的情况下,catch块引发了错误。因此,将永远无法获得所抱怨的数据。
打字稿解析器是否无法处理?
答案 0 :(得分:5)
您的错误在这里:
(error): void => {
throw new FetchError(`Error fetching file ${mpdUrl}: ${error}`);
},
您声明返回类型为void
(不返回任何内容的函数)而不是never
(永不返回的函数)。您可以将其更改为: never
,但我建议您让TypeScript进行推断:
error => {
throw new FetchError(`Error fetching file ${mpdUrl}: ${error}`);
},
…但是,如果您使用async
/ await
,则可以使用它们重写代码:
async function fetchMpdData(mpdUrl: string): Promise<MPDFileContainer> {
try {
const response = await fetch(mpdUrl)
const data = await response.text()
return parseStringMpd(data);
} catch (error) {
throw new Error(`Error fetching file ${mpdUrl}: ${error}`)
}
}
请注意,通过推断正确键入了变量response
和data
。声明它们的类型是没有用的。