Amigos, na véspera do fim de semana, queremos compartilhar com vocês outra publicação interessante que queremos coincidir com o lançamento de um novo grupo no curso 
"Desenvolvedor JavaScript" .

Tendo passado os últimos meses desenvolvendo aplicativos e bibliotecas React usando o Typecript, decidi compartilhar algumas das coisas que aprendi durante esse período. Neste guia, vou falar sobre os modelos que utilizo para o Typecript e o React em 80% dos casos.
Devo aprender texto datilografado para reagir ao desenvolvimento de aplicativos? Vale, ainda vale a pena! Por mim, percebi na prática que a digitação estrita leva à escrita de códigos muito mais confiáveis, desenvolvimento rápido, especialmente em grandes projetos. No início, você provavelmente ficará desapontado, mas, ao trabalhar, descobrirá que pelo menos um modelo mínimo será realmente muito útil.
E se você estiver preso em algo, lembre-se de que sempre pode digitar algo como qualquer outro. Qualquer um é seu novo amigo. E agora vamos passar diretamente para exemplos. 
Seu principal componente de reação com texto datilografado
Como é o componente de reação padrão no texto datilografado? Vamos comparar com o componente react em javascript.
import React from 'react' import PropTypes from 'prop-types' export function StandardComponent({ children, title = 'Dr.' }) { return ( <div> {title}: {children} </div> ) } StandardComponent.propTypes = { title: PropTypes.string, children: PropTypes.node.isRequired, } 
E agora a versão datilografada:
 import * as React from 'react' export interface StandardComponentProps { title?: string children: React.ReactNode } export function StandardComponent({ children, title = 'Dr.', }: StandardComponentProps) { return ( <div> {title}: {children} </div> ) } 
Muito parecido, certo? Substituímos 
propTypes pela interface de 
propTypes typescript .
O cabeçalho do 
prop permanece opcional, enquanto o suporte do herdeiro ainda é necessário. Exportamos nossa interface caso outro componente precisasse de um link para ela.
Estendendo atributos HTML padrão
Se quisermos que o componente pai possa fornecer atributos 
div digitados adicionais, como 
aria-hidden , 
style ou 
className , podemos defini-los na 
interface ou estender a interface interna. No exemplo abaixo, dizemos que nosso componente aceita qualquer propriedade 
div padrão, além do cabeçalho e dos descendentes.
 import * as React from 'react' export interface SpreadingExampleProps extends React.HTMLAttributes<HTMLDivElement> { title?: string children: React.ReactNode } export function SpreadingExample({ children, title = 'Dr.', ...other }: SpreadingExampleProps) { return ( <div {...other}> {title}: {children} </div> ) } 
Manipulação de eventos
Podemos tipificar manipuladores de eventos para garantir que o argumento do evento seja do tipo correto. O exemplo abaixo demonstra várias maneiras de atingir esse objetivo:
 export interface EventHandlerProps { onClick: (e: React.MouseEvent) => void } export function EventHandler({ onClick }: EventHandlerProps) {  
Não sabe qual assinatura de argumento usar? No editor, passe o mouse sobre a propriedade correspondente do manipulador de eventos.
Usando genéricos com componentes de reação
Este é um recurso mais avançado, mas é realmente poderoso. Normalmente, você define tipos de dados em componentes de reação com atributos específicos. Suponha que seu componente precise de um objeto de 
profile .
 interface ProfileType { name: string image: string age: number | null } interface ProfilesProps { profiles: Array<ProfileType> } function Profiles(props: ProfilesProps) {  
Agora vamos imaginar que você tem um componente que pode aceitar uma matriz de qualquer tipo. Os genéricos são como encomendar correspondências. O correio (nosso componente) não precisa saber o conteúdo do pacote que você está enviando, mas o remetente (componente pai) espera que o destinatário receba o conteúdo que ele enviou.
Nós o implementamos assim:
 interface GenericsExampleProps<T> { children: (item: T) => React.ReactNode items: Array<T> } export function GenericsExample<T>({ items, children, }: GenericsExampleProps<T>) { return ( <div> {items.map(item => { return children(item) })} </div> ) } 
Um exemplo um pouco estranho ... no entanto, demonstra a essência. O componente aceita uma matriz de elementos de qualquer tipo, passa por ela e chama a função 
children como uma função de renderização com um elemento da matriz. Quando nosso componente pai fornece um renderizador de renderização como um herdador, o elemento será digitado corretamente!
Não entende? Isso é normal. Eu mesmo não descobri os genéricos até o fim, mas é improvável que você precise entendê-los completamente. No entanto, quanto mais você trabalha com 
typescript , mais faz sentido.
Ganchos de digitação
Os ganchos funcionam principalmente fora da caixa. As duas exceções podem ser apenas 
useRef e 
useReducer . O exemplo abaixo mostra como podemos digitar refs.
 import * as React from 'react' interface HooksExampleProps {} export function HooksExample(props: HooksExampleProps) { const [count, setCount] = React.useState(0) const ref = React.useRef<HTMLDivElement | null>(null) // start our timer React.useEffect( () => { const timer = setInterval(() => { setCount(count + 1) }, 1000) return () => clearTimeout(timer) }, [count] )  
Nosso estado é digitado automaticamente, mas digitamos ref manualmente para indicar que ele será 
null ou conterá um elemento 
div . Quando 
useEffect ref na função 
useEffect , precisamos garantir que não seja 
null .
Digitação da caixa de velocidades
Com a caixa de câmbio é um pouco mais complicado, mas se for digitada corretamente, isso é ótimo.
 
Usando typeof e keyof para tipificar opções de componentes
Suponha que precisamos de um botão que possa ter uma aparência diferente, cada qual definida em um objeto com um conjunto de chaves e estilos, por exemplo:
 const styles = { primary: { color: 'blue', }, danger: { color: 'red', }, } 
Nosso componente de botão deve aceitar uma propriedade de 
type , que pode ser
qualquer chave do objeto de 
styles (por exemplo, 
"primário" ou 
"perigo" ). Podemos digitá-lo simplesmente:
 const styles = { primary: { color: 'blue', }, danger: { color: 'red', }, }  
Esses exemplos ajudarão você a percorrer 80% do caminho. Se você está preso, geralmente vale a pena
basta dar uma olhada nos exemplos de código aberto existentes.
Sancho UI é um conjunto de componentes de reação,
construído usando texto e emoção.
Blueprint é outro conjunto de componentes
react baseado em 
typescript .
Bem, de acordo com a tradição estabelecida, estamos aguardando seus comentários.