如何配置TSConfig以捕获变量初始化前访问的引用错误
如何配置TSConfig以捕获变量初始化前访问的引用错误
这个问题我之前也碰到过——明明运行时会触发「Cannot access 'myRef' before initialization」的暂时性死区(TDZ)错误,但TypeScript编译阶段却毫无提示,确实挺坑的。咱们来看看怎么通过配置解决这个问题。
首先得搞清楚为什么TS默认不报错:TS的类型检查器默认会假设函数可能在变量声明之后才被调用,没办法百分百确定函数的执行时机,所以不会主动触发这类错误。但如果我们想强制检测这种「变量未初始化就被访问」的场景,只需要开启一个特定的编译选项就行。
解决方案:开启noUseBeforeDeclare编译选项
你只需要在tsconfig.json的compilerOptions里添加"noUseBeforeDeclare": true,就能让TS在编译阶段捕获到这类问题。修改后的配置如下:
{ "compilerOptions": { "strict": true, "noImplicitReturns": true, "allowUnreachableCode": false, "allowUnusedLabels": false, "noUseBeforeDeclare": true } }
效果说明
开启这个选项后,TS会严格检查所有变量的使用时机:只要你的代码里存在「在变量声明前就通过函数(或其他方式)访问该变量」的情况,编译阶段就会抛出类似'myRef' is used before its declaration的错误,帮你提前规避运行时的TDZ问题。
比如你的代码里doSomething()在const myRef = [123]之前被调用,而doSomething内部又引用了myRef,开启选项后TS就会直接在编译阶段指出这个问题,不用等到运行时才踩坑。
内容来源于stack exchange
相关产品推荐
相关产品推荐

