The*_*tex 0 string node.js typescript visual-studio-code
此错误一直困扰着我,此代码中的 (Type 'string[]' is notassignable 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`);
}
Run Code Online (Sandbox Code Playgroud)
我真的很困惑如何重新解决这个错误。
for request.query
is的类型QueryString.ParsedQs
来自qs 包。这个包能够读取和解析复杂的查询变量,而不仅仅是“键=值”对。用户可以使用类似 的 URL 查询?dataset[]=first&dataset[]=second
,它将被解释为一个数组["first", "second"]
。
您的程序应该如何处理这些输入取决于您。你想处理它们,还是抛出错误?您可以检查是否dataset
是一个字符串数组并调用generateLabel
每个元素。但最简单的解决方案是确保它dataset
是 astring
否则返回错误。
请注意,在进入/块之前,您需要某种return
或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() });
}
}
);
Run Code Online (Sandbox Code Playgroud)
由于您已经在使用try
/ catch
around generateLabel
,因此另一种处理方法是dataset
在generateLabel
函数内验证。您将允许该函数接受dataset: any
,但抛出一个Error
ifdataset
不是string
.