变量在分配之前使用
我正在尝试通过JSON对象值分配对象并返回它
interface Input {
vehicles: Vehicle[];
costs: Cost;
}
function readInput(fileName: string): Input{
let input: Input;
readFile(fileName, function (err, data) {
if (err) {
throw err;
}
input = JSON.parse(data.toString("utf8"));
});
return input;
}
输入变量已经“使用”为let input: Input
似乎是一个错误。这是来自终端与tsc -w
命令
src/input.ts(43,12): error TS2454: Variable 'input' is used before being assigned.
19:22:01 - Compilation complete. Watching for file changes.
回答如下:
对input
变量进行的唯一赋值是传递给readFile
的回调函数。
Typescript无法仅从静态类型分析中确定将确实进行赋值(例如if (err)
可能就是这种情况),或甚至决定是否将调用回调函数(即,可以以这样的方式实现readFile
)绝不会打电话给你的功能。
此外,通过函数readFile
的名称判断似乎是异步的,这意味着在readInput()
已经完成执行后,很可能会调用您的回调。
考虑到所有这些因素,Typescript无法保证在return input;
点上会对该变量进行赋值(而且我相信它实际上不会这样)。