4

클라이언트 응용 프로그램에 오류가 있다는 것을 이해하지 못하는 것 같습니다. graphql 구독을 구독하고 업데이트를 검색 할 수 있지만 "Model : ModelClass []"라는 typescript 배열에 변경 내용을 푸시 할 수 없습니다. 뷰에 바인딩됩니다.잡히지 않은 TypeError : 속성 12를 추가 할 수 없습니다. 개체가 확장 가능하지 않습니다.

내가 누락되었거나 잘못하고있는 것이 있습니까?

models.component.ts

this.apollo.subscribe({ 
    query: gql` 
    subscription { 
     newModelCreated{ 
     _id 
     name 
     type 
     train_status 
     deploy_status 
     data_path 
     description 
     created_at 
     updated_at 
     } 
    } 
    ` 
}).subscribe((data) => { 
    console.log("CREATED: " + JSON.stringify(data.newModelCreated)); 
    console.log(data.newModelCreated); 
    var temp:ModelClass = data.newModelCreated; 
    this.models.push(temp); 
}); 

모델 class.ts 내가 this.models을 가정

export interface ModelClass { 
    _id: string; 
    name: string; 
    type: string; 
    parameters: { 
     alpha: number; 
    }; 
    train_status: string; 
    deploy_status: string; 
    test_accuracy: string; 
    created_at: number; 
    updated_at: number; 
} 
+0

두 개체는 호환되지 않습니다! – micronyks

+0

'모델 '의 종류는 무엇입니까? – micronyks

+0

modelsClass [] – cyberbeast

답변

0

는 아폴로에 의해 반환 된 배열입니다 그리고 당신은 새로운 생성 추가 할 개체를 초기 배열에? true의 경우, Apollo는 불변의 오브젝트를 돌려줍니다!

반환 된 초기 배열을 복제해야합니다. 구독 기능에있는 것과 같은 것 :

this.apollo 
    .watchQuery({query: INITIAL_GQL_REQUEST}) 
    .subscribe((data) => { 
     this.models = data.models.map((model) => { 
      return { 
       id: model.id, 
       name: model.name, 
       another: model.another 
      } 
     }) 
    }; 
}); 

그러면 구독 요청에서이 일반 자바 스크립트 배열에 생성 된 모델을 추가 할 수 있습니다.

추신 : 나는 상점에 저장되어 있고 가져 오기 정책에 따라 변경할 수있는 경우 상점 방문이 누락 될 수 있기 때문에 불변의 개체를 반환한다고 가정합니다.

희망 하시겠습니까?