Skip to content

Instantly share code, notes, and snippets.

View geovanisouza92's full-sized avatar
🏠
Working from home

Geo geovanisouza92

🏠
Working from home
View GitHub Profile
@geovanisouza92
geovanisouza92 / builder.ts
Last active April 3, 2019 11:49
A builder type where build() only appears after correct initalization
interface Buildable<T> {
build(): T;
}
type HasSawThickness = { sawThickness: number };
type HasDirection = { direction: "horizontal" | "vertical" };
type HasWidth = { width: number };
type HasHeight = { height: number };
type HasPhase = { phase: number };

Keybase proof

I hereby claim:

  • I am geovanisouza92 on github.
  • I am geovanisouza92 (https://keybase.io/geovanisouza92) on keybase.
  • I have a public key ASCpolGtmdNixlFQCCB-CbnR2smOlL8WtGUTk7GFb5CMfgo

To claim this, I am signing this object:

@geovanisouza92
geovanisouza92 / README.md
Created June 22, 2018 17:08
Injeção de módulos com Webpack

Uma forma simples de reduzir acoplamento modificando apenas a configuração de build.

Como a configuração é "apenas Javascript", fica fácil manipular, porém é importante tomar cuidado para não cair na situação do "na minha máquina funciona", pois cada ambiente pode gerar um bundle diferente. Testar é sempre importante.

Isso pode ser muito útil para injetar arquivos de configuração, implementação de features específicas (tracing, logging, metrics, error tracking, etc.) e até incluir módulos específicos de um ambiente, como suporte a source-map, por exemplo.

@geovanisouza92
geovanisouza92 / mapping.json
Created December 21, 2017 12:55
Remover acentos com TS
{
"À": "A",
"Á": "A",
"Â": "A",
"Ã": "A",
"Ä": "A",
"Å": "A",
"Ấ": "A",
"Ắ": "A",
"Ẳ": "A",
@geovanisouza92
geovanisouza92 / strict-functions-causes-errors.ts
Last active December 14, 2017 20:10
--strictFunctionTypes generates errors with generic functions
type Direction = keyof IDirectionOptions;
interface IDirectionOptions {
"horizontal": { foo: number; };
"vertical": { bar: string; };
"diagonal": { baz: boolean; };
}
// This structure works
@geovanisouza92
geovanisouza92 / flow-analysis.ts
Created December 13, 2017 11:35
Análise de fluxo para evitar de "esquecer" de tratar código
// Aqui você define uma enumeração de valores: ela não é constante, vc define
// valores estruturais (não tipos) que são aceitos
type WillyWonkaElevatorDirection = "horizontal"
| "vertical"
// | "diagonal" // Descomente isso
;
// Aqui você pode usar esse novo tipo
function handleDirection(direction: WillyWonkaElevatorDirection) {
switch (direction) {
@geovanisouza92
geovanisouza92 / awesome.ts
Last active April 27, 2018 00:11
Typescript pega os erros que você não vê
// isso indica que a função "fn" pode ser invocada com uma lista de objetos que
// tenham, pelo menos, um atributo "id" do tipo number, e que o retorno vai ser
// uma lista de números
function fn<T extends { id: number }>(items: T[]): number[];
// isso indica que a função "fn" pode ser invocada com uma lista de "qualquer
// coisa" e que o segundo parâmetro deve ser o nome de um atributo presente em
// todos os itens da lista, e que o retorno vai ser uma lista com valores dos
// tipos de cada atributo encontrado na lista
function fn<T, K extends keyof T>(items: T[], idProp: K): T[K][];
@geovanisouza92
geovanisouza92 / stats.js
Created November 21, 2017 11:39
Simple Node.js memory stats
const used = process.memoryUsage();
for (let key in used) {
console.log(`${key} ${Math.round(used[key] / 1024 / 1024 * 100) / 100} MB`);
}
@geovanisouza92
geovanisouza92 / .babelrc
Created October 16, 2017 16:47
Keep modules for Webpack, transpile everything for Jest
{
"presets": ["./.babelrc.js"]
}