sua didática é excelente, demorei mt p entender, quando vi seu video ficou bem mais claro, explicação mt melhor do q muitos canais maiores q vi pelo YT, parabens!!
Ficou excelente a construção do pensamento e didática! Como eu estava na dúvida ao ver isso no React, essa questão da flexibilidade e depois impedir que seja alterado para outro tipo, ajudou muito.
Só tenho a agradecer. Excelente explicação. Eu conhecia 10% do uso do Genereics. Não fazia ideia que dava pra fazer extends ou usar um valor default. Excelente vídeo, ansioso pelos próximos.
Irmão, simplesmente genial! Estava sofrendo demais para conseguir entender este conceito, mas com este vídeo eu entendi tudo! Sua didática é incrível, cara. Parabéns!
Só agora consegui entender Typescript da forma correta, sua didática é excepcional! Estava avaliando adquirir o curso React Avançado, e agora tenho certeza que irei adquirir. Muito obrigado pelo conhecimento compartilhado.
Mto bom! continue colocando conteudo assim pra community! concordo mto que generics eh complicado, principalmente a sintaxe e os ternarios com o extends
Rapaziada, se alguém não conseguiu entender eu pensei numa analogia daora, pense nesse generics sendo os parâmetros de uma função, só que ao invés de quem ta usando a função definir valores para entrar na função, essa pessoa vai definir tipos para serem usados na função
Por que as vezes no genéric, é colocado o símbolo " : " depois dos parenteses. Exemplo function foo(arg: type) : type { } Por que se coloca " : type" na frente dos parênteses?
Esse :type é o tipo de retorno da função. Se a gente for traduzir: function foo(arg: t2) : t3 { } função Foo genérica no tipo t1, que aceita um argumento do tipo t2, e retorna um valor do tipo t3. O retorno da função não necessariamente precisa ser do seu tipo genérico. Por exemplo, você pode ter uma função function Sum(...args: T) : number {}, por exemplo, que trabalha com o tipo genérico T porém retorna apenas números. E no código, você poderia ter um tipo type Alphanum = string | number, e usar a função das seguintes maneiras: Considerando que a função possui a lógica de parsear uma string em números, temos: let soma = Sum (13, "22", 17); // retorna o valor 52 corretamente soma = Sum(13, 22, 17); // retorna o valor 52 corretamente soma = Sum(13, "22", 17); // erro soma = Sum("13", "22", "17"); // retorna o valor 52 corretamente soma = Sum("13", 22, 17); // erro
muito bem explicado, obrigado!, estou com uma dúvida, nao vi videos no youtube explicando uma melhor maneira ou design pattern para organizar nossos types em projetos grandes, tipo, se eu devo definir os types no próprio componente, ou sempre faço um arquivo global contendo todos os types e importo quando precisar, por que é comum eu precisar reutilizar os types em mais de um componente, teria alguma sugestão de conteudo? ou quem sabe poderia fazer um vídeo futuramente, de qualquer forma, parabéns ótimo conteúdo
cara muito bom, que ótima explicação. só uma dúvida eu que venho do c# nele é possível eu restringir que o generics seja obrigatoriamente uma classe ou um tipo primitivo, no ts existe algo similar?
Opa, nunca cheguei a restringir através do generic não, tb nunca cheguei a ver em nenhum lugar, então se tem como, possivelmente não é uma prática comum. Vou até pesquisar mais e te falo!
Cara, eu não sabia nada de TS, assisti esse mini curso e estou aprendendo tudo e curtindo bastante, mas, tenho uma dúvida. Quando seria o caso de utilizar o generics? não consigo imaginar um cenário para esse tipo.
Opa Patric, o Generic é super hiper utilizado. Ele serve exatamente para funções que podem receber diferentes tipos de informação e tudo bem. Esse é o caso dos hooks do React, por exemplo. Mas não só isso, mas vários métodos de bibliotecas grandes que também podem esperar estruturas diferentes, como o Next, eles também usam muitos generics. Você pode ver os types sendo usados em ação aqui: github.com/DefinitelyTyped/DefinitelyTyped
Não. Generics é uma forma de você passar tipos dinamicamente para uma função. Assim como você consegue passar parametros via parênteses (), você pode passar tipos via . Então se você quiser passar mais de um tipo para uma função, seja para usar nos próprios argumentos, ou retorno da função ou para qualquer outra finalidade, você pode separa esses tipos dinâmicos atráves da virgula. Exemplo: // Declaração do metodo: function logValues(arg1: T, arg2: N) { console.log(arg1); console.log(arg2); } // chamada da função logValues('Exemplo', 51); Espero ter ajudado.
cara que explicação perfeita! Parabéns Willian, obrigado por compartilhar seu conhecimento.
Excelente aula! =D Muito bem explicado!
Uma honra receber elogio seu xD
Topzera a aula hem
Parabéns pela explicação. Mas claro que isso e ainda não vi!
sua didática é excelente, demorei mt p entender, quando vi seu video ficou bem mais claro, explicação mt melhor do q muitos canais maiores q vi pelo YT, parabens!!
Que professor top!
Vlw ♥️
Muito Obrigado William, demais Cara!!
Parabéns, não restou dúvida. Curti muito.
Isso que é bom xD
Aula Sensacional!
Didática muito boa!
Show \o/ de bola essa aula! Didática perfeita, Parabéns!!!
Ficou excelente a construção do pensamento e didática!
Como eu estava na dúvida ao ver isso no React, essa questão da flexibilidade e depois impedir que seja alterado para outro tipo, ajudou muito.
Yey! Então meu objetivo foi alcançado xD
Parabéns por disponibilizar um conteúdo tão bom, ótima didática!
Eu quem agradeço o suporte =D
E se puder se inscrever no canal, ajuda demais!
William, você é incrível! Entendi tudo da aula, não achei tão complexo graças a sua didática! Parabéns pelo trabalho incrível e muito obrigada!
Só tenho a agradecer. Excelente explicação.
Eu conhecia 10% do uso do Genereics. Não fazia ideia que dava pra fazer extends ou usar um valor default. Excelente vídeo, ansioso pelos próximos.
Irmão, simplesmente genial! Estava sofrendo demais para conseguir entender este conceito, mas com este vídeo eu entendi tudo! Sua didática é incrível, cara. Parabéns!
Cara, que aula excelente, completa e perfeita. Muito obrigado e Deus abençoe seu caminho.
Willian, obrigado, cara.. Eu assisti dois cursos da UDEMY e não entendi bem. Esse vídeo foi ACLARADOR!!! Realmente top!!!!
Fala Willian, tudo bem? parabéns pelo conteúdo. Ótima didática, obrigado por compartilhar conosco. Abraços!
Ajudou muito, mano! Parabéns pelo conteúdo. Acompanho o seu trampo já tem um bom tempo, pra mim é sempre tudo muito claro e útil.
Só agora consegui entender Typescript da forma correta, sua didática é excepcional! Estava avaliando adquirir o curso React Avançado, e agora tenho certeza que irei adquirir. Muito obrigado pelo conhecimento compartilhado.
Feliz que gostou! ♥️
Melhor explicação de Generics que eu vi
Excelente Willian, sua didática e simplicidade são ótimas 👍
Opa, eu quem agradeço =)
Ótima Didática!
Muito bom Willian!
Obrigado pelo vídeo e pela sua didática simples e direta.
didatica do will eh sensacional
Ótima explicação. Parabéns pelo vídeos.
Mto bom! continue colocando conteudo assim pra community! concordo mto que generics eh complicado, principalmente a sintaxe e os ternarios com o extends
Pois é, mas espero que agora dê uma ajudinha xD
Parabéns Willian, muito bem explicado 👏🏻
Muiiito obrigado!
E se puder se inscrever no canal, vai ajudar ainda mais a continuar com os vídeos!
Rapaziada, se alguém não conseguiu entender eu pensei numa analogia daora, pense nesse generics sendo os parâmetros de uma função, só que ao invés de quem ta usando a função definir valores para entrar na função, essa pessoa vai definir tipos para serem usados na função
Top demais! Obrigado professor
Excelente!
Muiiito obrigado!
E se puder se inscrever no canal, vai ajudar ainda mais a continuar com os vídeos!
ta aí a importância do C/C++
quem conhece Templates em C++ vai se familiarizar bastante com esses Generics
Sim, lembra demais a estrutura mesmo, mas só não confundir pois não são exatamente a mesma coisa xD
Explicação mto boa!
muito bom
Ótima explicação! 👏🏻
Ótima explicação, Willian! :)
Muiiito obrigado!
E se puder se inscrever no canal, vai ajudar ainda mais a continuar com os vídeos!
@@WillianJustenCursos :D
Por que as vezes no genéric, é colocado o símbolo " : " depois dos parenteses. Exemplo
function foo(arg: type) : type {
}
Por que se coloca " : type" na frente dos parênteses?
Esse :type é o tipo de retorno da função. Se a gente for traduzir:
function foo(arg: t2) : t3 { }
função Foo genérica no tipo t1, que aceita um argumento do tipo t2, e retorna um valor do tipo t3. O retorno da função não necessariamente precisa ser do seu tipo genérico. Por exemplo, você pode ter uma função function Sum(...args: T) : number {}, por exemplo, que trabalha com o tipo genérico T porém retorna apenas números.
E no código, você poderia ter um tipo type Alphanum = string | number, e usar a função das seguintes maneiras:
Considerando que a função possui a lógica de parsear uma string em números, temos:
let soma = Sum (13, "22", 17); // retorna o valor 52 corretamente
soma = Sum(13, 22, 17); // retorna o valor 52 corretamente
soma = Sum(13, "22", 17); // erro
soma = Sum("13", "22", "17"); // retorna o valor 52 corretamente
soma = Sum("13", 22, 17); // erro
muito bem explicado, obrigado!, estou com uma dúvida, nao vi videos no youtube explicando uma melhor maneira ou design pattern para organizar nossos types em projetos grandes, tipo, se eu devo definir os types no próprio componente, ou sempre faço um arquivo global contendo todos os types e importo quando precisar, por que é comum eu precisar reutilizar os types em mais de um componente, teria alguma sugestão de conteudo? ou quem sabe poderia fazer um vídeo futuramente, de qualquer forma, parabéns ótimo conteúdo
Thanks mage. :D
Ótima explicação! Aproveitando... Tem algum vídeo seu ou algum que você recomenda ensinando a usar o WSL?
Opa Pedro, eu tenho uma playlist inteira ensinando a configurar, só olhar no canal =)
@@WillianJustenCursos Obrigado! Vou ver!
cara muito bom, que ótima explicação.
só uma dúvida eu que venho do c# nele é possível eu restringir que o generics seja obrigatoriamente uma classe ou um tipo primitivo, no ts existe algo similar?
Opa, nunca cheguei a restringir através do generic não, tb nunca cheguei a ver em nenhum lugar, então se tem como, possivelmente não é uma prática comum. Vou até pesquisar mais e te falo!
Cara, eu não sabia nada de TS, assisti esse mini curso e estou aprendendo tudo e curtindo bastante, mas, tenho uma dúvida. Quando seria o caso de utilizar o generics? não consigo imaginar um cenário para esse tipo.
Opa Patric, o Generic é super hiper utilizado. Ele serve exatamente para funções que podem receber diferentes tipos de informação e tudo bem. Esse é o caso dos hooks do React, por exemplo.
Mas não só isso, mas vários métodos de bibliotecas grandes que também podem esperar estruturas diferentes, como o Next, eles também usam muitos generics.
Você pode ver os types sendo usados em ação aqui:
github.com/DefinitelyTyped/DefinitelyTyped
A palavra extends me lembrou interfaces, então pensei que generics é um tipo de interface, porém trabalha com tipos primitivos igual o alias 🤪
Só me confundi com uma coisa no final. Quando você fez React.FC o que significa a separação por vírgula? Seria um "merge" dos tipos?
Não. Generics é uma forma de você passar tipos dinamicamente para uma função. Assim como você consegue passar parametros via parênteses (), você pode passar tipos via .
Então se você quiser passar mais de um tipo para uma função, seja para usar nos próprios argumentos, ou retorno da função ou para qualquer outra finalidade, você pode separa esses tipos dinâmicos atráves da virgula.
Exemplo:
// Declaração do metodo:
function logValues(arg1: T, arg2: N) {
console.log(arg1);
console.log(arg2);
}
// chamada da função
logValues('Exemplo', 51);
Espero ter ajudado.
@@predator00071 Só esse exemplo já me ajudou, valeu irmão kk
cara esse curso com poucas aulas, está dando de 1000 a 0 , em cursos da udemy com 200 aulas (n citarei nomes hehehe)
Opa, fico muito feliz em ler isso xD