class-is
Enhances a JavaScript class by adding an is<Class>
property to compare types between realms.
Motivation
Checking if a value is an instance of a class in JavaScript is not an easy task.
You can use instanceof
, but that doesn't work between different realms or different versions. Comparing with constructor.name
could be a solution but if you need to Uglify the module it doesn't work, as it creates different names for the same module.
So the solution is to use symbols.
Installation
$ npm install class-is
Usage
import withIs from 'is-class-decorator';
class Person {
constructor(name, city) {
this.name = name;
this.city = city;
}
}
export default withIs(Person, { className: 'Person', symbolName: '@org/package-x/person' });
class Animal {
constructor(species) {
this.species = species;
}
}
export default withIs(Animal, { className: 'Animal', symbolName: '@org/package-y/animal' });
import Person from 'package-x';
import Animal from 'package-y';
const diogo = new Person('Diogo', 'Porto');
const wolf = new Animal('Gray Wolf');
console.log(Person.isPerson(diogo));
console.log(Person.isPerson(wolf));
Running the example above will print:
true
false
API
withIs(Class, { className: name, symbolName: symbol })
class
Type: class
The class to be enhanced.
className
Type: String
The name of the class your passing.
symbolName
Type: String
Unique id for the class. This should be namespaced so different classes from different modules do not collide and give false positives.
Example: @organization/package/class
Tests
$ npm test
$ npm test -- --watch
during development
License
MIT