Jadi kode berikut ada di Angular 4 dan saya tidak tahu mengapa itu tidak berfungsi seperti yang diharapkan.
Berikut ini cuplikan dari handler saya:
onUpdatingServerName(event: Event) {
console.log(event);
this.newserverName = event.target.value; //this wont work
}
Elemen HTML:
<input type="text" class="form-control" (input)="onUpdatingServerName($event)">
Kode memberi saya kesalahan:
Properti 'nilai' tidak ada pada jenis 'EventTarget'.
Tapi seperti yang bisa dilihat pada nilai console.log
itu memang ada di event.target
.
Jawaban:
event.target
di sini adalahHTMLElement
yang merupakan induk dari semua elemen HTML, tetapi tidak dijamin memiliki propertivalue
. TypeScript mendeteksi ini dan melempar kesalahan. Transmisikanevent.target
ke elemen HTML yang sesuai untuk memastikanHTMLInputElement
yang memang memilikivalue
properti:Sesuai dokumentasi :
(Penekanan saya)
sumber
var element = ev.target as HTMLElement
onFieldUpdate(event: { target: HTMLInputElement }) {
fungsi yang dipanggil. Lihat jawaban saya di bawah.event.target as HtmlInputlement
Meneruskan HTMLInputElement sebagai generik ke jenis acara juga harus berfungsi:
sumber
onChange
referensi penangan proeperty dalam kode React. Penangan react tidak mengharapkan tipe yang akan disetel untuk React.ChangeEvent dan akan menampilkan kesalahan pengetikan. Aku harus kembali ke (varian) jawaban yang dipilih sebagai gantinya, dengan gips:(event.target as HTMLInputElement).value
.Berikut perbaikan lain yang berhasil untuk saya:
(event.target as HTMLInputElement).value
Itu harus menghilangkan kesalahan dengan memberi tahu TS bahwa itu
event.target
adalahHTMLInputElement
, yang secara inheren memilikivalue
. Sebelum menentukan, TS mungkin hanya tahu bahwaevent
saja itu adalahHTMLInputElement
, jadi menurut TS yang dimasukkantarget
adalah beberapa nilai yang dipetakan secara acak yang bisa berupa apa saja.sumber
Saya sedang mencari solusi untuk kesalahan TypeScript serupa dengan React:
Saya ingin
event.target.dataset
membuka elemen tombol yang diklik di React:Berikut adalah bagaimana saya bisa mendapatkan
dataset
nilai untuk "ada" melalui TypeScript:sumber
onChange={(event: ChangeEvent<HTMLInputElement>): void => { setTextFilter(event.target.value); }}
Cara saya melakukannya adalah sebagai berikut (lebih baik daripada tipe pernyataan imho):
Ini mengasumsikan Anda hanya tertarik pada
target
properti, yang merupakan kasus paling umum. Jika Anda perlu mengakses properti lain darievent
, solusi yang lebih komprehensif melibatkan penggunaan&
operator persimpangan tipe:Ini adalah versi Vue.js tetapi konsepnya berlaku untuk semua kerangka kerja. Jelas Anda bisa lebih spesifik dan daripada menggunakan umum
HTMLInputElement
Anda bisa menggunakan misalnyaHTMLTextAreaElement
untuk textareas.sumber
Anda harus menggunakan
event.target.value
prop dengan onChange handler jika tidak, Anda dapat melihat:Atau Jika Anda ingin menggunakan handler selain onChange, gunakan
event.currentTarget.value
sumber
event.currentTarget.value
adalah pendekatan terbaik.