尝试通过suppressExcessPropertyErrors编译器选项来抑制TS2339

时间:2017-02-22 06:26:41

标签: angular typescript ionic2

以下是代码:

var x = {};
x.test = 'abc';

获取打字稿编译器错误:

  

TS2339:类型“{}”上不存在属性“test”。

我想要禁止对象文字的此警告,我想将suppressExcessPropertyErrors放入tsconfig.json应解决此问题。

tsconfig:

{
    "compilerOptions": {
        "suppressExcessPropertyErrors": true
    },
    ...
}

但没有改变..编译器仍然显示错误。

感谢您的任何提示;)

2 个答案:

答案 0 :(得分:4)

  

我认为将suppressExcessPropertyErrors放入tsconfig.json应解决此问题。

没有。它抑制了对象构造中的多余属性,例如

var x = {};
x = {test:'abc'};
  

我想要禁止对象文字的这个警告

您可以使用any类型执行任何操作,例如

var x:any = {};
x.test = 'abc';

更多

这称为懒惰对象初始化,处理它的模式在此处介绍:https://basarat.gitbooks.io/typescript/content/docs/tips/lazyObjectLiteralInitialization.html

答案 1 :(得分:0)

我赞同 @basarat 一些观点,但请允许我添加一些建议。

这样的声明对象道具可能有几个原因:

var x = {
  test: ''
};
x.test = 'abc';
  1. 您将获得智能感知支持,并在下次调用x对象时,您将看到此对象包含的属性。
  2. 适合测试。您将确保在项目的某处不会更改对象的构造,并且可以编写测试记住它。
  3. 您将避免使用新属性覆盖对象属性。如果您将对象声明为any类型,则可能是这样。
  4. <强>解释

    // origin object x with originProp property
    var x: any = {
      originProp: 'abc'
    };
    // new object with new newProp property
    x = {
      newProp:'abc'
    };