这个错误一直困扰着我,此代码中出现 (Type 'string[]' is not allocate to type 'string') 错误
export const generateLabelFile = functions.https.onRequest(
async (request, response) => {
const dataset = request.query['dataset'];
if (!dataset) {
response.status(404).json({ error: 'Dataset not found' });
}
try {
const labelsFile = await generateLabel(dataset);
^^^ ERROR ABOVE
response.json({ success: `File uploaded to ${labelsFile}` });
} catch (err) {
response.status(500).json({ error: err.toString() });
}
}
);
async function generateLabel(dataset: string): Promise<String> {
const storage = new Storage({ projectId: PROJECT_ID });
const prefix = `datasets/${dataset}`;
// get all images in the dataset
const [files] = await storage.bucket(AUTOML_BUCKET).getFiles({ prefix });
const csvRows = files
.map(file => getMetadata(file.name))
.filter((metadata): metadata is ImageMetadata => metadata !== null)
.map(({ label, fullPath }) => `gs://${AUTOML_BUCKET}/${fullPath},${label}`);
console.log('Total rows in labels.csv:', csvRows.length);
// No videos found, abort
if (csvRows.length === 0) {
throw new Error(`No videos found`);
}
我真的很困惑如何解决这个错误。
类型为request.query
is QueryString.ParsedQs
它来自于qs包 https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/qs/index.d.ts。该包能够读取和解析复杂的查询变量,而不仅仅是“键=值”对。用户可以使用 URL 查询,例如?dataset[]=first&dataset[]=second
,这将被解释为一个数组["first", "second"]
.
您的程序应如何处理这些输入取决于您。您想处理它们还是抛出错误?你可以检查一下是否dataset
是一个字符串数组并调用generateLabel
在每个元素上。但最简单的解决方案是确保dataset
is a string
否则返回错误。
请注意,您需要某种return
or else
在进入之前try
/catch
阻止,这样你就不会打电话generateLabel
与非字符串。
export const generateLabelFile = functions.https.onRequest(
async (request, response) => {
const dataset = request.query['dataset'];
if (!dataset) {
response.status(404).json({ error: 'Dataset not found' });
return;
}
if ( typeof dataset !== "string" ) {
response.status(500).json({ error: 'Invalid dataset' });
return;
}
try {
const labelsFile = await generateLabel(dataset);
response.json({ success: `File uploaded to ${labelsFile}` });
} catch (err) {
response.status(500).json({ error: err.toString() });
}
}
);
处理这个问题的另一种方法,因为您已经在使用try
/catch
around generateLabel
,是为了验证dataset
内generateLabel
功能。您将允许该函数接受dataset: any
,但抛出一个Error
if dataset
除了string
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)