这是 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 () {});
});
}
最佳答案
Ryan 是对的 - TypeScript 将检查不兼容的返回类型,并在您的函数返回(例如,在一个地方返回一个字符串)时向您发出 Could not find the best common type...
错误警告和一个不同地方的数字。
如果你的函数失败,它会从 return 语句中选择类型,因此,如果你在条件中返回一个字符串,然后稍后失败,TypeScript 编译器将推断返回类型为 string
.
我在 TypeScript Playground 中用许多变体测试了这一点 - 所以这意味着 Visual Studio 中的警告来自另一个扩展 - 查看我的设置中可能的候选者让我认为您正在运行 ReSharper(或者您可能正在使用另一个 IDE 也会检查这一点)。
自版本 6.1 以来,ReSharper 已检查不一致的返回点
,并且他们确实在版本 8.1 中引入了通用 TypeScript 支持。
解决方法是从所有 return 语句返回一个通用类型,在您的情况下,如果您的调用代码不依赖于该调用的结果,则完全删除 return
关键字。
关于node.js - Typescript 中返回点不一致是什么意思,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20537175/