Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript tsc严格模式-如何使用提前退货来避免;对象可能是';未定义'&引用;_Typescript_Tsc - Fatal编程技术网

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