O que é e para que serve o TypeScript를 추론하지 않습니까?
infer
. Ela não é muito comum no dia-a-dia, mas a maioria das bibliotecas mais avançadas em algum momento vai utilizar oinfer
para algum tipo de operação.Para entendermos completamente o
infer
, precisamos ter uma noção de como o TypeScript faz a asserção de tipos, e também a hierarquia desses tipos. Eu não vou entrar em detalhes sobre essas informações aqui agora, mas você pode achar vários conteúdos sobre isso na própria documentação do TS.O
infer
é uma 키워드 que 보완 o que chamamos de conditional typing, ou tipos condicionais, que é quanto temos uma inferencia de tipos, seguida de uma condição, por exemplo:type NonNullable<T> = T extends null | undefined ? never : T
No exemplo anterior, estamos pegando um tipo e verificando se ele é uma extensão ou de
null
ou de undefined
, ou seja, tipos que não resolvem para true
, e ai estamos fazendo uma type condition para dizer: "Se o tipo for um desses você retorna never
, caso contrário retorna o próprio tipo".O
infer
permite irmos um pouco mais além do que estamos acostumados nesses modelos. A ideia é que podemos definir uma variável dentro da nossa inferência de tipo que pode ser usada ou retornada, é como se pudéssemos fazer um const tipo = <inferencia>
.예를 들어, vamos olhar o utilitário nativo do TS chamado
ReturnType
, que pega uma função passada como paraâmetro e retorna qual é o tipo do seu retorno:type ReturnType<T> = T extends (...args: any[]) => infer R ? R : any
O que está acontecendo aqui é uma inferência condicional, já que o
infer
não pode ser utilizado fora de condicionais. Primeiro verificamos se o tipo passado estende uma assinatura de função, se sim, vamos jogar o retorno dessa função para uma variável que chamamos de R
, e ai retorná-la.Outro exemplo, é extrair o retorno de uma promise, como eu comentei aqui , se formos pensar em como podemos fazer esse tipo, primeiro temos que verificar se o tipo passado é uma extensão do tipo
Promise<T>
, e depois inferir T
para retornálo, caso contrário, retornamos never
:type Unpromise<P> = P extends Promise<infer T> ? T : never
Outros casos de uso
Podemos usar o infer
em uma série de casos, os mais comuns são:
type FirstArgument<T> = T extends (first: infer F, ...args: any[]) => any ? F : never
type ArrayType<T> = T extends (infer A)[] ? A : T
type ExtractType<T> = T extends Promise<infer R>
? R
: T extends (...args: any[]) => any
? ExtractType<ReturnType<T>>
: T
Reference
이 문제에 관하여(O que é e para que serve o TypeScript를 추론하지 않습니까?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/_staticvoid/o-que-e-e-para-que-serve-o-infer-no-typescript-3fo7텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)