NgRx Selector Performance
NgRx selectors promise performance gains via memoization. However, we must take care when defining...
Use npm pack to test your packages locally
When working with npm packages you often want to test your package without having to publish it to...
Understanding async tests in Angular
If you are testing an Angular application, then at some point, you will be required to test...
Change Detection: Getting in the (Angular) Zone!
Who knew an event binding in one component could cause a display bug in another? We will explain the...
Does Angular Support Generic Component Types?
You may be familiar with writing Typescript Generics like Grid<IRowData> but how does this work...
NgRx 9: Introducing strictActionWithinNgZone runtime check
NgRx 9 brings us a brand new runtime check: strictActionWithinNgZone. If enabled, this check will hig...
Introducing TestCases to Typescript
I want to test a Typescript function with lots of varied inputs to ensure good coverage. How do I go...
Regex search and replace with VS Code
I wanted to upgrade ag-grid across a number of apps. Standard search and replace did not work due to...
Generate array of all an interface's keys with Typescript
When working with a large and complex code base like AG Grid it is very easy to miss updating certain...
VS Code: It's taking a while to configure your breakpoints"
I love using VS Code to run and debug local scripts. However, I had noticed that starting up the task...
Test that every MutationObserver is disconnected to avoid memory leaks
MutationObserver is a useful mechanism to watch for changes in the DOM and respond to them. The...
Supporting Circularly Referenced Mapped Types in Typescript
Recursive structures are very common across many applications but they can pose a big challenge to...
Code Refactoring with Regex Find and Replace
When faced with a major refactoring task across your codebase don't forget you can use Regexes to do...
Write Typescript in the browser with SystemJs
(This post is just a rough public note about a side effect of some of my work. May or may not be...
Use Arrow function, () => {}, to correctly bind this
As part of my role working for AG Grid I get to see a number of repeated issues. One such issue that...
Setting up a Certificate for localhost
(This post is mainly a public note for myself but maybe will help others too.) Self Signed...
Adding a layer of more explicit typings on top of 3rd party library interfaces
You may have noticed that the typing provided by 3rd party libraries often feels very loose. This sho...
ngTemplateOutlet: The secret to customisation
ngTemplateOutlet is a powerful tool for creating customisable components. It is used by many Angular...
Understanding ngrx/component-store debounceSync()
In the previous post we looked at the debounce option for @ngrx/component-store selectors and how it...
Understanding @ngrx/component-store Selector Debouncing
@ngrx/component-store selectors have a debounce option that lets the state settle before emitting....