extension-methods-js
v1.0.2
Published
Binds static methods to types.
Downloads
4
Maintainers
Readme
extension-methods-js
This package is inspired by C#'s extension methods. This package provides a function that will bind an extension type to whatever target type you want those methods to be on.
Table of Contents
Installation:
npm i extension-methods-js
Basic Usage:
import { bindExtensions } from 'extension-methods-js';
// For TypeScript, update the target type interfaces with extension methods.
// Be sure to OMIT the first argument (the target) and that methods are NOT static.
declare global {
interface Array<T> {
clear(): void;
}
interface Set<T> {
pipe(action: (item: T) => void): void;
}
}
// Define extension classes.
// Ensure each method is static and the first argument is the target type.
class ArrayExtensions {
public static clear<TSource>(arr: TSource[]): void {
arr.length = 0;
}
}
class SetExtensions {
public static pipe<TSource>(set: TSource[], action: (item: TSource) => void): void {
for (const item of set) {
action(item);
}
}
}
// Bind extension classes to targets.
bindExtensions([[ArrayExtensions, Array], [SetExtensions, Set]]);
// You can also use the other overload bindExtensions(ArrayExtensions, Array) if you only have one extension class.
const arr = [1, 2, 3];
// Arrays now have extension methods.
arr.clear();
// Will be []
console.log(arr);
const set = new Set([1, 2, 3]);
// Sets now have extension methods.
set.pipe(x => console.log(x));