2016-01-08 28 views
7

Ho creato un controllo alimentatitheForm utilizzando FormBuilder.Angular2: Errore - Proprietà 'UpdateValue' non esiste sul tipo 'AbstractControl'

quando ho cercato di aggiornare il valore di un controllo come questo

this.theForm.find('MainImageId').updateValue(id, true, true);

Ha funzionato bene ma WebStorm mostra un errore che dice

Error:(148, 24) TS2339: Property 'updateValue' does not exist on type 'AbstractControl'.

Che cosa sto facendo di sbagliato? e perché funziona?

+0

Questo è in fase di runtime, WebStorm non ha informazioni di runtime. Controlla il tipo di ritorno nel codice sorgente di 'theForm.find()' –

+0

Gotcha. È AbstractControl, si veda gitHub di angular [qui] (https://github.com/angular/angular/blob/2.0.0-beta.0/modules/angular2/src/common/forms/model.ts#L305-L411) . Ma cosa dovrei fare? –

risposta

9

Secondo Typescript casting object's property Credo che questo dovrebbe risolvere il problema

find è ora get (> = RC.5)

(<Control> this.theForm.find('MainImageId')) .updateValue(id, {onlySelf:true, emitEvent:true}); 

    // (<Control> this.theForm.find('MainImageId')) .updateValue(id, {onlySelf:true, emitEvent:true}); 

Edit: I parametri facoltativi sono forniti come un oggetto in secondo parametro.

+0

Ben fatto! ma accetta solo un parametro, mentre ci si aspetta che accetti almeno 1 e fino a 4 come descritto [qui] (https://github.com/angular/angular/blob/2.0.0-beta.0/modules/angular2/src /common/forms/model.ts#L239-L305). quindi 'updateValue (id);' non dà alcun errore ma 'updateValue (id, true, true);' dice 'Errore: (146, 5) TS2346: i parametri forniti non corrispondono a nessuna firma dell'obiettivo di chiamata. –

+0

You potrebbe essere necessario un po '{} 'attorno ai parametri facoltativi, ma qui sembra che abbia raggiunto i miei limiti TS. Forse qualcun altro può fornire alcune informazioni. –

Problemi correlati