Typescript tsc严格模式-如何使用提前退货来避免;对象可能是';未定义'&引用;
我有这个:Typescript tsc严格模式-如何使用提前退货来避免;对象可能是';未定义'&引用;,typescript,tsc,Typescript,Tsc,我有这个: const lckTemp = this.locks.get(key); if (!lckTemp) { log.error('Missing lock for key:', key); return; } if (beginRead) { lckTemp.readers++ } if (endRead) { // in case something weird happens, never let it go below
const lckTemp = this.locks.get(key);
if (!lckTemp) {
log.error('Missing lock for key:', key);
return;
}
if (beginRead) {
lckTemp.readers++
}
if (endRead) {
// in case something weird happens, never let it go below 0.
lckTemp.readers = Math.max(0, --lckTemp.readers);
}
我收到这个信息:
它一定是指lckTemp,但是如果没有定义它,我会提前返回,有什么方法可以避免使用@ts ignore
编译消息吗
我使用的是tsc--strict
配置:
{
"compilerOptions": {
"skipLibCheck": true,
"outDir": "dist",
"declaration": true,
"baseUrl": ".",
"target": "es2018",
"rootDir": "src",
"module": "commonjs",
"noImplicitAny": true,
"removeComments": true,
"allowUnreachableCode": false,
"lib": [
"es2017",
"es2018"
]
},
"compileOnSave": false,
"include": [
"src"
]
}
我不建议您告诉编译器忽略警告,而是避免警告:
lckTemp!.readers = Math.max(0, --lckTemp!.readers);
这应该可以完成这项工作,因为它告诉编译器这里的lckTemp
不能null
或未定义。但是,我认为这并不是很吸引人,因为我希望尽早返回,所以我建议您像这样重新构造代码:
const lckTemp = this.locks.get(key);
if (lckTemp) {
if (beginRead) {
lckTemp.readers++
}
if (endRead) {
// in case something weird happens, never let it go below 0.
lckTemp.readers = Math.max(0, --lckTemp.readers);
}
return;
}
log.error('Missing lock for key:', key);
你确定它不是在抱怨.readers
?它是在抱怨lckTemp可能未定义是的
const lckTemp = this.locks.get(key);
if (lckTemp) {
if (beginRead) {
lckTemp.readers++
}
if (endRead) {
// in case something weird happens, never let it go below 0.
lckTemp.readers = Math.max(0, --lckTemp.readers);
}
return;
}
log.error('Missing lock for key:', key);