Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.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检查和数组_Typescript_Definitelytyped - Fatal编程技术网

Typescript检查和数组

Typescript检查和数组,typescript,definitelytyped,Typescript,Definitelytyped,启用编译器选项strictNullChecks时,我无法完全理解Typescript的行为。似乎有时Typescript(版本2.4.1)理解字符串[]中的项目是字符串,有时它不: 接口MyMap{ [键:字符串]:字符串[]; } 函数f(myMap:myMap){ const keys=Object.keys(myMap);//keys:string[]=>很好。 for(让键中的键){//key:string | undefined=>为什么? key=key作为字符串//因此需要强制转换

启用编译器选项
strictNullChecks
时,我无法完全理解Typescript的行为。似乎有时Typescript(版本2.4.1)理解
字符串[]
中的项目是
字符串,有时它不:

接口MyMap{
[键:字符串]:字符串[];
}
函数f(myMap:myMap){
const keys=Object.keys(myMap);//keys:string[]=>很好。
for(让键中的键){//key:string | undefined=>为什么?
key=key作为字符串//因此需要强制转换。
const strings=myMap[key];//strings:string[]=>Fine。
常量s=strings[0];//s:string=>很好。
//错误:
//“string | undefined”类型的参数不能分配给“string”类型的参数。
//类型“未定义”不可分配给类型“字符串”。
useVarArgs(…字符串);
}
}
函数useVarArgs(…字符串:字符串[]){
}
更新2017-07-14:

这种奇怪的行为只有在使用
downlevelIteration
时才能观察到。My
tsconfig.json

{
  "compilerOptions": {
    "target": "es5",
    "outDir": "target",
    "downlevelIteration": true,
    "strictNullChecks": true
  }
}

经过进一步调查,我可以确认这不是打字稿问题。问题的根源是用于
IteratorResult
的类型。我使用了
@types/core js 0.9.36

接口迭代器结果{
完成:布尔;
值?:T;
}
value
是可选的,这在技术上是正确的,因为根据我的问题,当done为true时,
value
“可以省略。”正如我的问题所证明的,可选性在实践中并不有用

Typescript附带的类型(“在
tsconfig.json
的“lib”部分中配置的es2015”,即文件
lib.es2015.iterable.d.ts
)采用了更为实用的方法,显然假设
完成时将不使用

接口迭代器结果{
完成:布尔;
值:T;
}

为了解决这个问题,您可以编辑
@types/core js
,或者用Typescript附带的libs替换它。不过,替换不是100%等效的-请查看讨论。

您使用的是什么版本的TypeScript?你的代码看起来不错。对不起,我忘了提。版本2.4.1。还编辑了问题。我在2.4.1上测试了您的代码,它工作正常<代码>键
是需要强制转换的字符串,没有您提到的问题。看起来这是一个bug。我在Typescript的Github页面上提出了一个问题:我无法用2.4.1、
strictNullChecks
downLevelIteration
重现这个错误。你在一个单独的玩具项目中复制过吗?