William Grasel

Inferência de tipos é o real motivo do TypeScript existir!

Pare de tipar coisas desnecessariamente!

Strict Mode + ESLint neles!

no-inferrable-types

Quando vale a pena tipar:

let notInicialized: number;

let letMultipleValues: number | string = 'some string';

const mutableValue: { a: number | string } = { a: 666 };

Começando a usar inferência mais avançada...

As vezes precisamos dar mais dicas sobre como e o que inferir!

As vezes precisamos deixar as coisas mais... genéricas!

Generics é seu melhor amigo!

Promise do que?

class UserService {
  getAllUsers() {
    return fetch('/users');
  }
}
interface User {
  id: number;
  name: string;
  age?: number;
}

class UserService {
  getUsers(): Promise<User> {
    return fetch('/user');
  }
}

Criando tipos genéricos

Restringindo tipos genéricos

Passando genéricos como parâmetro!

Genéricos especializados

Genéricos dinâmicos

Que tal um pouco de recursividade?

Não é tão difícil assim...

Vamos falar sobre Tuplas!

Variadic Tuples ❤️

Tuplas Recursivas!

Inferencia Recursiva!

Impondo limites a recursividade

Vamos respirar um pouco...

Strings são bem simples

As vezes nem tanto...

Ah, nem é tão complicado assim...

Prometo que essa é a ultima!

Quem aí...

Espero que tenham se divertido!

Obrigado! =)