lodash属性扩展后,Typescript不可赋值错误

时间:2016-12-05 18:59:25

标签: typescript lodash

我已定义了一个对象,并希望使用允许的可选参数扩展该对象。我正在使用lodash迭代数组并确定是否允许或不允许。当我尝试将myArray的赋值设置为temp时,即使我的对象符合可分配的正确格式,我也会收到错误。

  

输入'({}& MyObject& {allowed:boolean;})[]'不是   可分配给' [MyObject]'。财产' 0'在类型中缺失   '({}& MyObject& {allowed:boolean;})[]'。

export class MyObject {
  constructor(
  public id: number,
  public shortName: string,
  public name: string,
  public allowed?: boolean
  ){}
}

var temp = _.map(this.myArray, function(element) {
  if (_.includes(event, element.id))
    return _.extend({}, element, {allowed: false});
  else
    return _.extend({}, element, {allowed: true});
});
this.myArray = temp

2 个答案:

答案 0 :(得分:0)

由于MyObject[][MyObject]的类型不同,_.map<T>(arr:T[])会返回T[]而不是[T]

您应明确指定myArray的类型如下:

this.myArray: MyObject[] = [new MyObject(0, '', '')]

答案 1 :(得分:0)

使用WebStorm遇到此问题时,虽然不是很漂亮,但是可以通过类似方法解决此问题。

   export class MyObject {
      constructor(
      public id: number,
      public shortName: string,
      public name: string,
      public allowed?: boolean
      ){}
    }

    var temp = _.map(this.myArray, function(element) {
      var object: MyObject = _.extend({}, element, <{allowed: boolean}>{allowed: _.includes(event, element.id)});
      return object; 
    });

    this.myArray = temp