Skip to content

Instantly share code, notes, and snippets.

@JulianG
JulianG / ObjectPool.as
Last active December 10, 2015 16:28
General purpose AS3 Object Pool class
package
{
/**
* ObjectPool Class
* @author Julian
*/
public class ObjectPool
{
private var _list:Array;
/*
tslint:disable no-any
tslint:disable no-empty
*/
class MutedConsole implements Console {
memory: any;
Console: NodeJS.ConsoleConstructor;
assert(test?: boolean, message?: string, ...optionalParams: any[]): void { }

Keybase proof

I hereby claim:

  • I am juliang on github.
  • I am juliang (https://keybase.io/juliang) on keybase.
  • I have a public key ASC6w3PW2ig7pBT3EOlvCiqZnC4W60rPOG57MHiE4C807wo

To claim this, I am signing this object:

@JulianG
JulianG / avoiding-non-null-assertions.md
Last active October 11, 2020 12:05
Avoiding the Non-null-assertion Operator in React + Mobx + Typescript Projects

Avoiding Non-null-assertion Operator in React + Mobx + Typescript Projects

Today I learned something at work. I am new to MobX and I had to make changes to a React + Typescript + MobX project. I noticed the props of some React components were marked as optional, and I was told it was because of how the dependency injection worked.

The Problem

When injecting MobX stores into React components in Typescript, the recommended approach in MobX docs involves declaring optional props (?). This results in having to perform null checks when accessing an injected store, and MobX recommendeds using the non-null assertion operator (!).

interface BananaProps {
@JulianG
JulianG / null-checking.md
Last active February 8, 2019 15:34
Null Checking in TypeScript

Null Checking in TypeScript

Following up on the previous gist about avoiding non-null-assertion operator I think it would be good to see some examples of null checking in TypeScript.

Assumming we're using TypeScript with --strictNullChecks, and that this is what a banana looks like:

type Banana = {
  id: number,
  open: () => void
};
@JulianG
JulianG / introducing-bananatabs.md
Last active February 18, 2019 12:31
Introducing Banana Tabs!

Introducing Banana Tabs!

Has this ever happened to you?

You keep lots of tabs in a single window to the point where you can't tell what's what anymore.

too many tabs

Or worse: you try -like me- to group your tabs by task, or subject, or anything, and as a result you end up with too many windows instead:

@JulianG
JulianG / testing-opinions.md
Last active February 27, 2019 14:06
Testing Opinions

Testing Opinions

⚠️ Warning! This article is highly opinionated.

It happens often at work that my colleagues and I discuss the best way or the proper way to test a specific React component. We don't always agree.

Testing the output of a function is not the same as testing its implementation details.

Avoid Testing Implementation Details

@JulianG
JulianG / spread-vs-slice.md
Last active July 18, 2019 15:31
spread vs slice

DON'T DO THIS!

When working on legacy projects it may be tempting to go around changing

const myCopy = arr.slice();

with:

@JulianG
JulianG / no-implicit-any.md
Last active July 19, 2019 06:31
Catching bugs with stricter TypeScript

Catching bugs with stricter TypeScript

We recently enabled "noImplicitAny" in a relatively old TypeScript project. It resulted in 269 new errors. Most of those were missing type annotations but in a few cases, we found problems with the code. These had been around for months and were not caught by our test suite.

TL;DR;

We should prefer strict TypeScript configurations to catch issues, not just at compile-time, but (with a good IDE) as we type.

We should try to keep up-to-date with TypeScript versions to benefit from the ever-improving error messages; saving development time.

@JulianG
JulianG / ts-generics.md
Last active July 19, 2023 09:12
A use case for TypeScript Generics

A use case for TypeScript Generics

The following may be a bit obvious for some. But something just clicked in my head and I thought I'd write it down.

When generics are a good idea

Imagine we write a function that returns the "oldest" item in a set/array:

function getOldest(items: Array<{ age: number }>) {