Na minha reagir e aplicativo original datilografado, eu uso: onChange={(e) => data.motto = (e.target as any).value}
.
Como defino corretamente as digitações para a classe, para que eu não precise me intrometer no sistema de tipos any
?
export interface InputProps extends React.HTMLProps<Input> {
...
}
export class Input extends React.Component<InputProps, {}> {
}
Se eu colocar target: { value: string };
, recebo:
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
olhos selvagens
fonte
fonte
currentTarget
. Nesse caso, sim, funciona, mas a pergunta era sobretarget
target
incorreto na maioria dos casos. Além disso, o alvo não tiverT
para nos forçar a escrever corretamenteReact.ChangeEvent<HTMLInputElement>
um FormEvent.a maneira correta de usar no TypeScript é
Siga a aula completa, é melhor entender:
fonte
lib: ["dom"]
acompilerOptions
emtsconfig.json
as HTMLInputElement
funciona para mimfonte
O que
target
você tentou adicionarInputProps
não é o mesmo quetarget
você queria, que está noReact.FormEvent
Portanto, a solução que eu pude encontrar foi estender os tipos relacionados ao evento para adicionar seu tipo de destino, como:
Depois de ter essas classes, você pode usar seu componente de entrada como
sem erros de compilação. De fato, você também pode usar as duas primeiras interfaces acima para seus outros componentes.
fonte
sorte eu encontrar uma solução. você pode
e escreva um código como:
e:ChangeEvent<HTMLInputElement>
fonte
Aqui está uma maneira de destruir o objeto ES6, testado com o TS 3.3.
Este exemplo é para uma entrada de texto.
fonte
É quando você está trabalhando com um
FileList
Objeto:fonte
E certifique-se de ter o
"lib": ["dom"]
seutsconfig
.fonte
Ao usar o componente filho, verificamos o tipo como este.
Componente pai:
Componente filho:
fonte
Uma alternativa que ainda não foi mencionada é digitar a função onChange em vez dos props que ela recebe. Usando React.ChangeEventHandler:
fonte
Obrigado @haind
Sim
HTMLInputElement
trabalhou para o campo de entradaEssa
HTMLInputElement
interface é herdada daHTMLElement
qual é herdadaEventTarget
no nível raiz. Portanto, podemos afirmar usando oas
operador para usar interfaces específicas de acordo com o contexto, como neste caso, estamos usandoHTMLInputElement
para o campo de entrada outras interfacesHTMLButtonElement
,HTMLImageElement
etc.Para mais referência, você pode verificar outra interface disponível aqui
fonte