在Typescript中有不一致的返回点意味着什么?

这里有一个NodeJs的JavaScript代码,我用来保存上传的文件。 我试图将其转换为Typescript。 它在单词保存上抛出一个错误 – “function保存具有不一致的返回点”。

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 () {}); }); } 

瑞恩是正确的 – TypeScript将检查不兼容的返回types,并警告你Could not find the best common type...错误,如果你的函数返回,例如,一个string在一个地方,一个数字在不同的地方。

如果你的函数没有通过,它将从返回语句中selecttypes,所以如果你在一个条件中返回一个string,然后通过后来,TypeScript编译器会推断返回types是string

我在TypeScript Playground中testing了很多变体 – 所以这意味着Visual Studio中的警告来自另一个扩展 – 查看可能的候选人在我的设置上让我觉得你有ReSharper运行(或者你正在使用一个不同的IDE也检查这一点)。

ReSharper从版本6.1开始检查了inconsistent return points ,他们在版本8.1中引入了一般的TypeScript支持。

解决的办法是从所有的返回语句中返回一个通用的types,在你的情况下,如果你的调用代码不依赖于这个调用的结果,那么这个语句就是完全移除return关键字。