Dalam bereaksi dan app saya naskah, saya menggunakan: onChange={(e) => data.motto = (e.target as any).value}
.
Bagaimana cara saya mendefinisikan typing untuk kelas dengan benar, jadi saya tidak perlu meretas jalan saya dengan sistem type any
?
export interface InputProps extends React.HTMLProps<Input> {
...
}
export class Input extends React.Component<InputProps, {}> {
}
Jika saya menempatkan target: { value: string };
saya mendapatkan:
ERROR in [default] /react-onsenui.d.ts:87:18
Interface 'InputProps' incorrectly extends interface 'HTMLProps<Input>'.
Types of property 'target' are incompatible.
Type '{ value: string; }' is not assignable to type 'string'.
reactjs
typescript
types
typescript-typings
mata angin
sumber
sumber
currentTarget
. Dalam hal itu ya, itu berhasil, tetapi pertanyaannya adalah tentangtarget
target
kesalahan dalam banyak kasus. Selain itu, target tidak harusT
memaksa kita untuk menulis dengan benarReact.ChangeEvent<HTMLInputElement>
FormEvent.cara yang benar untuk digunakan dalam TypeScript adalah
Ikuti kelas lengkap, lebih baik untuk memahami:
sumber
lib: ["dom"]
kecompilerOptions
dalamtsconfig.json
as HTMLInputElement
bekerja untukkusumber
The
target
Anda mencoba untuk menambahkanInputProps
tidak samatarget
Anda ingin yang diReact.FormEvent
Jadi, solusi yang dapat saya buat adalah, memperluas jenis acara terkait untuk menambahkan jenis target Anda, seperti:
Setelah Anda memiliki kelas-kelas itu, Anda dapat menggunakan komponen input Anda sebagai
tanpa kesalahan kompilasi. Bahkan, Anda juga dapat menggunakan dua antarmuka pertama di atas untuk komponen lainnya.
sumber
beruntung saya menemukan solusinya. kamu bisa
lalu tulis kode seperti:
e:ChangeEvent<HTMLInputElement>
sumber
Berikut ini cara penghancuran objek ES6, diuji dengan TS 3.3.
Contoh ini untuk input teks.
sumber
Ini adalah ketika Anda bekerja dengan
FileList
Obyek:sumber
Dan pastikan Anda memiliki
"lib": ["dom"]
di Andatsconfig
.sumber
Saat menggunakan Komponen Anak Kami memeriksa jenis seperti ini.
Komponen Induk:
Komponen anak:
sumber
Alternatif yang belum disebutkan adalah mengetikkan fungsi onChange bukan props yang diterimanya. Menggunakan React.ChangeEventHandler:
sumber
Terima kasih @ haind
Ya
HTMLInputElement
berfungsi untuk bidang inputIni
HTMLInputElement
adalah antarmuka yang diwarisi dariHTMLElement
yang diwarisi dariEventTarget
pada tingkat root. Oleh karena itu kita dapat menegaskan menggunakanas
operator untuk menggunakan antarmuka spesifik sesuai dengan konteks seperti dalam kasus ini kita gunakanHTMLInputElement
untuk bidang input antarmuka lain dapatHTMLButtonElement
,HTMLImageElement
dll.Untuk referensi lebih lanjut Anda dapat memeriksa antarmuka lain yang tersedia di sini
sumber