2.0.5 • Published 4 years ago
ts-options-defaults v2.0.5
Table of contents
Getting Started
npm i ts-options-defaults
Usage
Design pattern
import { defaults } from 'ts-options-defaults';
export interface ISomeOptions {
logger?: Partial<Console>;
}
export class Something {
static defaults = {
logger: console,
};
options: ISomeOptions & typeof Something.defaults;
constructor(options?: ISomeOptions) {
this.options = defaults(Rat.defaults, options);
}
}
Behavior
import { defaults } from 'ts-options-defaults';
class TestLogger {
constructor(public name = `TestLogger`) {}
log() {
console.log(`Call from ${this.name}`);
}
}
const someDefaults = {
console,
nested: {
property: 'default',
shouldBeDefault: 'default',
array: ['default1', 'default2'],
},
};
const someOptions = {
nested: {
property: 'overriden',
array: ['overriden1'],
},
array: ['overriden'],
};
const options = defaults(
someDefaults,
someOptions,
{
console: {
log: () => {
console.log(`TEST`);
},
},
},
{
console: new TestLogger(),
},
);
options.console.log(`log`); // "Call from TestLogger"
options.console.debug(`debug`); // "debug"
// options will be:
{
"nested": {
"property": "overriden",
"shouldBeDefault": "default",
"array": [
"overriden1"
]
},
"array": [
"overriden"
]
}
// someDefaults will not be mutated!
Features
Beats alternatives - better alternative to {...defaults, ...options}
destructing and lodash _.defaults
or _.merge
Secure - immune to prototype pollution attack
Simple - just 40 lines of clean TypeScript code
Strongly typed - result remains strongly typed
2.0.2
4 years ago
2.0.5
4 years ago
2.0.1
4 years ago
0.0.72
4 years ago
0.0.72-1
4 years ago
0.0.42
4 years ago
0.0.43
4 years ago
0.0.71-0
4 years ago
0.0.41
4 years ago
0.0.40
4 years ago
0.0.38
4 years ago
0.0.39
4 years ago
0.0.34-3
4 years ago
0.0.33
4 years ago
0.0.32-1
4 years ago
0.0.32-0
4 years ago
0.0.30
4 years ago
0.0.10
4 years ago
0.0.3-7
4 years ago
0.0.3-6
4 years ago
0.0.3-5
4 years ago
0.0.3-4
4 years ago
0.0.3-3
4 years ago
0.0.3-2
4 years ago
0.0.3-1
4 years ago
0.0.3-0
4 years ago
0.0.2
4 years ago
0.0.1
4 years ago
0.0.0
4 years ago