The Eq Interface defines equality and inequality in typescript. The decorator implements the EQ-Interface. On the other hand it is a library for funtions. Mainly Lists of this interface are used.
There is an es5-translation in the dist-directory. tsc was used for transpiling.
npm install decorator-eq --save
const carConfig = new EqConfig();
@Eq.implement({
config: carConfig
})
class Car implements IEq {
@Eq.field({})
private interior:TInterior;
@Eq.field({fuzzy:true})
private name:string;
constructor(interior:TInterior, name:string){
this.interior=interior;
this.name=name;
}
//this is neccessary to ensure the interface
eq:(a:IEq)=>boolean;
neq:(a:IEq)=>boolean;
}
Notice the Configuration-Object. Objects of car can now be seen as equal, if the two properties interior and name are the same. Be aware that the properties can be any type that support "===" or has IEq implemented.
eq(listOfCars, new Car('plastic','cheapo'), config:IEqConfig):IEq[]
eq(listOfCars, new Car(null,'bmw'), config:IEqConfig):IEq[] // reveals all bmws
fuzzyEq(listOfCars, new Car(null,'di'), config:IEqConfig):IEq[] //reveals Audi and Cadillac
neq(listOfCars, new Car('leather',null), config:IEqConfig):IEq[] //reveals all none leather cars
let copyOfConfig = config.clone();
let newFields:Array<IField> = [];
copyOfFields.fields.foreach((val, key) => if(key%2) newFields.push(val));
copyOfFields.fields = newFields;
fuzzyEq(listOfCars, new Car('leather', null)) //all listOfCars
fuzzyEq(listOfCars, new Car('leather', 'di')) //reveals Audi and Cadillac or leather cars
eq(listOfCars, new Car('leather', null)) //all leather cars
eq(listOfCars, new Car('leather', 'di')) //reveals leather cars
eq(listOfCars, new Car('leather', 'audi')) //reveals leather cars or audis
npm test
In lieu of a formal styleguide, take care to maintain the existing coding style. Add unit tests for any new or changed functionality. Lint and test your code.
- 0.1.0 Initial release
- 0.1.2 transpiling from typescript to es5
- 0.1.3 reorder code in multiple files
- 0.1.4 better transpiling
- 0.1.5 fuzzy field cloning
- 0.1.6 config-fields handling