Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/413.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/26.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
Javascript TypeScript TS7015:元素隐式地具有一个';任何';类型,因为索引表达式不是类型';编号';_Javascript_Angular_Typescript - Fatal编程技术网

Javascript TypeScript TS7015:元素隐式地具有一个';任何';类型,因为索引表达式不是类型';编号';

Javascript TypeScript TS7015:元素隐式地具有一个';任何';类型,因为索引表达式不是类型';编号';,javascript,angular,typescript,Javascript,Angular,Typescript,我在Angular 2应用程序中遇到此编译错误: TS7015: Element implicitly has an 'any' type because index expression is not of type 'number'. 导致它的代码段是: getApplicationCount(state:string) { return this.applicationsByState[state] ? this.applicationsByState[state].length

我在Angular 2应用程序中遇到此编译错误:

TS7015: Element implicitly has an 'any' type because index expression is not of type 'number'.
导致它的代码段是:

getApplicationCount(state:string) {
    return this.applicationsByState[state] ? this.applicationsByState[state].length : 0;
  }
但是,这不会导致此错误:

getApplicationCount(state:string) {
    return this.applicationsByState[<any>state] ? this.applicationsByState[<any>state].length : 0;
  }
getApplicationCount(状态:字符串){
返回此.ApplicationByState[state]?此.ApplicationByState[state]。长度:0;
}
这对我来说毫无意义。我想在第一次定义属性时解决这个问题。现在我在写:

private applicationsByState: Array<any> = [];
私有应用程序按状态:数组=[]; 但是有人提到,问题是试图在数组中使用字符串类型作为索引,我应该使用映射。但我不知道该怎么做


谢谢你的帮助

如果需要键/值数据结构,则不要使用数组

可以使用常规对象:

private applicationsByState: { [key: string]: any[] } = {};

getApplicationCount(state: string) {
    return this.applicationsByState[state] ? this.applicationsByState[state].length : 0;
}
或者您可以使用:

私有应用程序按状态:Map=newmap(); getApplicationCount(状态:字符串){ 返回this.ApplicationByState.has(状态)?this.ApplicationByState.get(状态)。长度:0; }
不是OP的直接问题,但对于在其控制范围之外的库中遇到此错误的用户,可以通过添加以下内容来抑制此错误:

{
...
“SuppressImplicationIndexErrors”:true,
...
}

tsconfig.json
文件。

我使用它来绕过它,以便使用窗口对象

//in js code somewhere
window.DataManager = "My Data Manager";


//in strict typescript file
let test = (window as { [key: string]: any })["DataManager"] as string;
console.log(test); //output= My Data Manager

我实际上是在使用React,当我通过自定义键(即
myObj[myKey]=
)分配对象的属性时,我遇到了这个错误。为了解决这个问题,我简单地使用了作为keyof

接口IMyObj{title:string;content:string;}
const myObj:IMyObj={title:'Hi',content:'希望一切顺利'};
常量myKey:string='content';
myObj[myKey as keyof IMyObj]=“现在一切都很好!”;
这显式地告诉Typescript,自定义字符串(myKey)属于用于声明对象(myObj)的接口/类型中的属性组

注意:获取属性值的另一种方法显示在闭合的扩展上:

接口IMyObj{
标题:字符串;
内容:字符串;
}
const myObj:IMyObj={title:'Hi',content:'希望一切顺利'};
常量myKey:string='content';
常量getKeyValue=(对象:T)=>(键:U)=>
obj[key];
log(getKeyValue(myObj)(myKey))

 compilerOptions:{

  "suppressImplicitAnyIndexErrors": true,
  "strictNullChecks":false,
  "strictPropertyInitialization": false,

 }

如果您试图定义一个字典(使用字符串键),请使用类型
{[key:string]:any}
现在我得到的
TS2339:属性“size”在类型“{[key:string]:any;}”上不存在。
当您试图获取具有
this.availableStates.size
的元素数时,是否进行向下投票,但没有解释?这在访问不受开发人员控制的dictionary对象时很有帮助。您缺少使用“不受您控制”的库的要点。我仍然坚持我最初的评论;因为主题是用户将看到和搜索的错误,而不管OP的描述如何。OP没有询问不在其控制下的库,您在回答中也没有提到。如果您说过“在您的情况下,您不应该这样做,但是对于其他在代码中有此错误的人,您可以按如下方式抑制错误…”,那么这将很好,并得到我的支持。窗口永远不应该用作解决方法。这和使用globals是一样的。极度沮丧的坏习惯,导致的长期问题比解决的问题还多。
 compilerOptions:{

  "suppressImplicitAnyIndexErrors": true,
  "strictNullChecks":false,
  "strictPropertyInitialization": false,

 }