node.js - 如何在 Typescript 中处理未分配的变量
问题描述
以下 Typescript 代码导致ts(2454): Variable "timeout" is used before it has been assigned
catch 语句中出现编译错误。
let timeout: NodeJS.Timeout
try {
prepareConnection(() => {
timeout = setTimeout(() => {
console.log('timeout while opening connection');
}, 10000);
openConnection();
});
} catch (err) {
if (timeout) clearTimeout(timeout); //<-- Error ts(2454)
console.error('error while opening connection');
}
什么是满足编译器的好方法?
另请参阅问题在分配之前使用变量时的常见模式
解决方案
我认为这里最好的解决方案是使用明确的赋值断言(从 typescript 2.7 开始可用)。
明确赋值断言是一个允许 ! 放置在实例属性和变量声明之后,以向 TypeScript 传达一个变量确实是为所有意图和目的分配的,即使 TypeScript 的分析无法检测到这一点。
let timeout!: NodeJS.Timeout //add a exclamation mark "!"
推荐阅读
- android - 如何使用 html 读取存储在内部共享存储中 Android 应用程序文件夹中的图像?
- javascript - 如何检测动态变化的输入
- python - 如何为 xgboost.train 设置评估指标?
- google-chrome-devtools - 远程设备面板发生了什么?
- .net - 如何将我从 SignalR 收到的值传递给 Angular 中的数组?
- swift - Swift 编译器错误:无法将类型“()”的值转换为指定类型“字符串”
- css - 如何让自定义选择浮动过滤器成为 ag-grid 角度中列的全宽
- c# - 正确处理泛型方法中的初始化
- vue.js - 在 Vue JS 中,如何使我的 APIService.js 类对组件全局可用,而不需要单独的组件导入它?
- apache-kafka - 为什么多个 Kafka 消费者在分组时以不同的速度消费,而不是没有?