如何解决TypeScript编译器错误TS2339:Property';errorValue';在我的Angular 5应用程序的类型{}上不存在
我在组件中编写了一个函数,用于处理Rest服务返回的错误,并确定应向用户显示的错误消息。该方法将错误对象(这是Rest服务中具有特定结构的自定义数据)作为参数,为了找到相关内容,然后使用switch语句发送一个由i18n服务使用的JSON密钥,如下所示(我知道它不是最好的) 我的问题是,有时我希望将一些返回的错误数据作为参数插入到返回的消息中,上面的方法允许我这样做,但我这样设置的方式会引发TypeScript编译器错误:如何解决TypeScript编译器错误TS2339:Property';errorValue';在我的Angular 5应用程序的类型{}上不存在,angular,typescript,tslint,Angular,Typescript,Tslint,我在组件中编写了一个函数,用于处理Rest服务返回的错误,并确定应向用户显示的错误消息。该方法将错误对象(这是Rest服务中具有特定结构的自定义数据)作为参数,为了找到相关内容,然后使用switch语句发送一个由i18n服务使用的JSON密钥,如下所示(我知道它不是最好的) 我的问题是,有时我希望将一些返回的错误数据作为参数插入到返回的消息中,上面的方法允许我这样做,但我这样设置的方式会引发TypeScript编译器错误: if (errorValue) { transl
if (errorValue) {
translationArgs.errorValue = errorValue;
}
我怎样才能防止这种脱毛错误?我认为给对象const translationArgs一个errorValue属性并将其赋值为null就足够了。。。但我错了。如有任何建议,将不胜感激
我也知道这个方法/函数有点难看,所以任何关于它的评论都是非常感谢的
(根据要求)这是我的tsconfig文件的内容
{
"compilerOptions": {
"alwaysStrict": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"lib": [
"es6",
"dom"
],
"module": "commonjs",
"moduleResolution": "node",
"noFallthroughCasesInSwitch": true,
"noImplicitAny": true,
"noImplicitReturns": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"outDir": "dist",
"pretty": true,
"sourceRoot": "frontend",
"rootDir": "frontend",
"sourceMap": true,
"target": "es5",
"types": [
"node",
"mocha",
"chai",
"chai-as-promised",
"aws-sdk",
"q",
"sinon",
"file-saver"
],
"typeRoots": [
"./node_modules/@types"
]
},
"include": [
"frontend/**/*.ts"
],
"exclude": [
".git",
".idea",
"config",
"dist",
"e2e_tests",
"gulp",
"node_modules",
"reports",
"server",
"typings/browser.d.ts"
],
"awesomeTypescriptLoaderOptions": {
"useWebpackText": true
},
"angularCompilerOptions": {
"debug": false
},
"compileOnSave": false,
"buildOnSave": false,
"atom": {
"rewriteTsconfig": false
}
}
这不是一个很好的解决方案,但你总能做到
(translationArgs as any).errorValue = errorValue;
或者提供一个比
any
更好的类型,它不是{}
我对您的tslint配置没有任何问题。这是一个小的重构版本
myErrorHandler(err: any): string {
let error: any;
try {
error = err.error.errors[0];
} catch (e) {
return this.localizationService.translate('common.messages.global_error');
}
const errorMsg = error.error;
const errorValue = error.value;
const translationArgs = {errorValue: null};
let correctMsg;
if (errorValue) {
translationArgs.errorValue = errorValue;
}
switch (errorMsg) {
case 'not_unique': {
correctMsg = errorValue ? 'common.validation.not_unique_value' : 'common.validation.not_unique';
break;
}
default: {
correctMsg = 'common.messages.global_error';
break;
}
}
return this.localizationService.translate(correctMsg, translationArgs as any);
}
能否显示tslint配置?这不是tslint问题,而是TypeScript编译器错误。您的tsconfig.json设置是什么?我想知道是否必须为const对象创建接口?
err.error.errors[0]。error
让我头疼。我使用Vayrex的answerEquivalent语法中的try/catch将其删除(仅为了完整性):translationArgs.errorValue=errorValue代码>虽然我个人更喜欢作为
构造。
myErrorHandler(err: any): string {
let error: any;
try {
error = err.error.errors[0];
} catch (e) {
return this.localizationService.translate('common.messages.global_error');
}
const errorMsg = error.error;
const errorValue = error.value;
const translationArgs = {errorValue: null};
let correctMsg;
if (errorValue) {
translationArgs.errorValue = errorValue;
}
switch (errorMsg) {
case 'not_unique': {
correctMsg = errorValue ? 'common.validation.not_unique_value' : 'common.validation.not_unique';
break;
}
default: {
correctMsg = 'common.messages.global_error';
break;
}
}
return this.localizationService.translate(correctMsg, translationArgs as any);
}