首页 > 解决方案 > 如何在 Typescript 中处理未分配的变量

问题描述

以下 Typescript 代码导致ts(2454): Variable "timeout" is used before it has been assignedcatch 语句中出现编译错误。

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');
}

什么是满足编译器的好方法?

另请参阅问题在分配之前使用变量时的常见模式

标签: node.jstypescript

解决方案


我认为这里最好的解决方案是使用明确的赋值断言(从 typescript 2.7 开始可用)。

明确赋值断言是一个允许 ! 放置在实例属性和变量声明之后,以向 TypeScript 传达一个变量确实是为所有意图和目的分配的,即使 TypeScript 的分析无法检测到这一点。

let timeout!: NodeJS.Timeout //add a exclamation mark "!"

推荐阅读