Collectives™ on Stack Overflow
Find centralized, trusted content and collaborate around the technologies you use most.
Learn more about Collectives
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
Learn more about Teams
I'm building something like
this React example
in Typescript. The goal is to have a parent that has a state, and it creates several stateless child components that pass their clicks back to the parent.
Since the example is in Javascript I have no idea what the types of the input box events and the onChange handlers are...? I've tried several options like
React.MouseEvent<HTMLInputElement>
, but that's just guesswork...
Parent component
create imageRows and pass the handler:
render() {
<ImageRow key={el.url} onChange={this.onChange}/>
// what should the type of e be?
onChange(e:any){
And the ImageRow component
export interface ImageRowProps {
genre: Array<number>
url: string
onChange : any // what is the type of the callback function?
export class ImageRow extends React.Component<ImageRowProps> {
render() {
return <div className="imagerow">
<input type="checkbox" key={index} onChange={this.props.onChange} defaultChecked={(num == 1)}/>
The similar question only shows the event type, not the handler type. When I change the event type:
onChange(e: React.FormEvent<HTMLInputElement>){
console.log(e.target.value)
I get this error:
Property 'value' does not exist on type 'EventTarget'.
–
–
–
–
–
–
–
console.log(event.target.value); // Not Working (Blank value)
console.log(event.target.checked); // Working Fine ( true / false )
//../src/components/testpage2/index.tsx
import * as React from 'react';
import { TestInput } from '@c2/component-library';
export default class extends React.Component<{}, {}> {
state = {
model: {
isUserLoggedIn: true
onInputCheckboxChange = (event: React.ChangeEvent<HTMLInputElement>) => {
console.log(event.target.value); // Not Working
console.log(event.target.checked); // Working
const field = event.target.name;
const model = this.state.model;
model[field] = event.target.checked;
return this.setState({model: model});
render() {
return (
<TestInput name="isUserLoggedIn" label="Is User LoggedIn : " type="checkbox" onChange={this.onInputCheckboxChange} />
//=============================================================//
import * as React from 'react';
//import * as cs from 'classnames';
export interface TestInputProps extends React.HTMLAttributes<HTMLInputElement> {
name: string;
label: string;
onChange: React.ChangeEventHandler<HTMLInputElement>;
placeholder?: string;
value?: string;
type?: string;
error?: string;
className?: string;
export const TestInput : React.SFC<TestInputProps> = ({ name, label, onChange, placeholder, value, type, className, error, ...rest }) => {
let wrapperClass:string = 'form-group';
if (error && error.length > 0) {
wrapperClass += " " + 'has-error';
return (
<div className={wrapperClass}>
<label htmlFor={name}>{label}</label>
<div className="field">
<input
type={type}
name={name}
className="form-control"
placeholder={placeholder}
value={value}
onChange={onChange}/>
{error && <div className="alert alert-danger">{error}</div>}
TestInput.defaultProps ={
type: "text"
You can use BaseSyntheticEvent
as event type as all DOM event in react are not native but Synthetic.
render() {
<ImageRow key={el.url} onChange={this.onChange}/>
// BaseSyntheticEvent is better than 'any'
onChange(e:BaseSyntheticEvent){
Just do this:
onChange = (event: Event) => {
const { value } = event.target as unknown as { value: boolean, };
setState(value);
<input type='radio' onChange={this.onChange} />
And the squeegee lines will go away.
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.