Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.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编译器错误TS2339:Property';errorValue';在我的Angular 5应用程序的类型{}上不存在_Angular_Typescript_Tslint - Fatal编程技术网

如何解决TypeScript编译器错误TS2339:Property';errorValue';在我的Angular 5应用程序的类型{}上不存在

如何解决TypeScript编译器错误TS2339:Property';errorValue';在我的Angular 5应用程序的类型{}上不存在,angular,typescript,tslint,Angular,Typescript,Tslint,我在组件中编写了一个函数,用于处理Rest服务返回的错误,并确定应向用户显示的错误消息。该方法将错误对象(这是Rest服务中具有特定结构的自定义数据)作为参数,为了找到相关内容,然后使用switch语句发送一个由i18n服务使用的JSON密钥,如下所示(我知道它不是最好的) 我的问题是,有时我希望将一些返回的错误数据作为参数插入到返回的消息中,上面的方法允许我这样做,但我这样设置的方式会引发TypeScript编译器错误: if (errorValue) { transl

我在组件中编写了一个函数,用于处理Rest服务返回的错误,并确定应向用户显示的错误消息。该方法将错误对象(这是Rest服务中具有特定结构的自定义数据)作为参数,为了找到相关内容,然后使用switch语句发送一个由i18n服务使用的JSON密钥,如下所示(我知道它不是最好的)

我的问题是,有时我希望将一些返回的错误数据作为参数插入到返回的消息中,上面的方法允许我这样做,但我这样设置的方式会引发TypeScript编译器错误:

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

}