我在Angular 2应用程序中具有以下TypeScript代码。
constructor(private windows:WindowService, private http:Http) { http.get('config.json') .map(res => res.json()) .subscribe(config => { this.oAuthCallbackUrl = config.callbackUrl; // here this.oAuthTokenUrl = config.implicitGrantUrl; // here this.oAuthTokenUrl = this.oAuthTokenUrl .replace('__callbackUrl__', config.callbackUrl) // here .replace('__clientId__', config.clientId) // here .replace('__scopes__', config.scopes); // here this.oAuthUserUrl = config.userInfoUrl; // here this.oAuthUserNameField = config.userInfoNameField; // here }) }
我到过的每个地方// here
都会从IDE中收到一条错误消息,提示我有一个“未解析的变量”,例如unresolved variable callbackUrl
。
问题在于此配置对象是应用程序获取的JSON文件的结果,我不知道如何提前定义其类型。
我以为我可以将订阅行更改为show .subscribe(config:any => {
或其他内容,但这没有用。
该代码可以正常编译。一切都可以在浏览器中(并通过Webpack)正常运行。我只是想摆脱IDE中的错误,而不必添加7条//noinspection TypeScriptUnresolvedVariable
注释来压制它们。
正如@DCoder在上面的评论中提到的,解决方案是将config
参数包装在括号中,然后将类型添加到其中。
constructor(private windows:WindowService, private http:Http) { http.get('config.json') .map(res => res.json()) .subscribe((config:any) => { // <-- WORKS NOW! this.oAuthCallbackUrl = config.callbackUrl; this.oAuthTokenUrl = config.implicitGrantUrl; this.oAuthTokenUrl = this.oAuthTokenUrl .replace('__callbackUrl__', config.callbackUrl) .replace('__clientId__', config.clientId) .replace('__scopes__', config.scopes); this.oAuthUserUrl = config.userInfoUrl; this.oAuthUserNameField = config.userInfoNameField; }) }
缺少括号使我无法在上面添加任何类型的键入信息config
。