В моем среагировать и машинопись приложения, я использую: onChange={(e) => data.motto = (e.target as any).value}
.
Как мне правильно определить типизацию для класса, чтобы мне не пришлось взламывать систему типов any
?
export interface InputProps extends React.HTMLProps<Input> {
...
}
export class Input extends React.Component<InputProps, {}> {
}
Если поставить, target: { value: string };
то получу:
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
дикие глаза
источник
источник
currentTarget
. В таком случае да, это работает, но вопрос был оtarget
target
в большинстве случаев использование неверно. Более того, цель неT
React.ChangeEvent<HTMLInputElement>
передать событие, а не FormEvent.правильный способ использования в TypeScript -
Следите за полным классом, лучше понять:
источник
lib: ["dom"]
кcompilerOptions
вtsconfig.json
as HTMLInputElement
работает для меняисточник
То, что
target
вы пытались добавить,InputProps
- это не то, чтоtarget
вы хотели, которое находится вReact.FormEvent
Итак, решение, которое я мог придумать, заключалось в расширении типов, связанных с событиями, для добавления вашего целевого типа, как:
Когда у вас есть эти классы, вы можете использовать свой компонент ввода как
без ошибок компиляции. Фактически, вы также можете использовать первые два интерфейса выше для других ваших компонентов.
источник
повезло, я нашел решение. ты можешь
а затем напишите такой код:
e:ChangeEvent<HTMLInputElement>
источник
Вот способ деструктуризации объекта ES6, протестированный с TS 3.3.
Этот пример предназначен для ввода текста.
источник
Это когда вы работаете с
FileList
объектом:источник
И убедитесь , что у вас есть
"lib": ["dom"]
в вашемtsconfig
.источник
При использовании дочернего компонента мы проверяем тип следующим образом.
Родительский компонент:
Дочерний компонент:
источник
Альтернатива, которая еще не была упомянута, - это ввести функцию onChange вместо свойств, которые она получает. Использование React.ChangeEventHandler:
источник
Спасибо @haind
Да
HTMLInputElement
работал для поля вводаЭто
HTMLInputElement
интерфейс, унаследованный отHTMLElement
которого наследуетсяEventTarget
на корневом уровне. Поэтому мы можем утверждать, чтоas
оператор using использует определенные интерфейсы в соответствии с контекстом, как в этом случае мы используемHTMLInputElement
для поля ввода другие интерфейсыHTMLButtonElement
иHTMLImageElement
т. Д.Для получения дополнительной информации вы можете проверить другой доступный интерфейс здесь
источник