这是NodeJs中的一个小javascript代码,我用来保存上传的文件。我正在尝试将其转换为Typescript。它会在单词save上抛出一个错误 - “函数保存返回点不一致”。
public save(req, res, next) {
// validate if upload was successful
if (!req.files || !req.files.userfile) return next(new Error('Upload data not received, can\'t proceed.'));
var userfile = req.files.userfile;
// examine this object for available attributes
console.log(userfile);
// ensure public/data dir exists
var dataDir = 'public/data';
//Add temporarily unique name here
var filenum = 0;
while(fs.existsSync(dataDir + "/" + tempFile(filenum))){
filenum++;
}
var target = path.join(dataDir, tempFile(filenum));
fs.rename(userfile.path, target, function (err) {
req.uploadLink = target.replace(/public/gi, '');
next(err);
// cleanup
fs.unlink(userfile.path, function () {});
});
}
答案 0 :(得分:1)
Ryan是对的 - 如果您的函数返回,TypeScript将检查不兼容的返回类型并警告您Could not find the best common type...
错误,例如,一个地方的字符串和另一个地方的数字。
如果你的函数失败了,它将从return语句中选择类型,所以如果你在一个条件中返回一个字符串,然后再过去,那么TypeScript编译器会将返回类型推断为{{1} }。
我在TypeScript Playground中对此进行了测试,但有很多变化 - 所以这意味着Visual Studio中的警告来自另一个扩展 - 在我的设置中查看可能的候选人让我觉得你有ReSharper在运行(或者你正在使用一个不同的IDE,也检查这个。)
ReSharper自6.1版开始检查string
,他们确实在版本8.1中引入了一般的TypeScript支持。
修复是从所有return语句返回一个公共类型,如果您的调用代码不依赖于该调用的结果,则在您的情况下将完全删除inconsistent return points
关键字。