I'm writing an API in JavaScript, and I'm confused whether or not I should check if the API user is passing me the correct type on which the API expects to work. Actually not the type, but if you are passing me the object with the properties on which API will work. Is it a good practice for me to issue an error if the user does not pass an object with the properties expected for the API, or should I leave this on behalf of the JavaScript compiler?
I should check the type like this:
function PackageManager() {
this.packages = {};
}
PackageManager.prototype.addPackage = function(assetPackage) {
Array.isArray(assetPackage) ? this.addAssetPackages(assetPackage) : this.addAssetPackage(assetPackage);
}
PackageManager.prototype.addAssetPackages = function(assetPackages) {
for(let i = 0; i < assetPackages.length; i++)
this.addAssetPackage(assetPackages[i]);
}
PackageManager.prototype.addAssetPackage = function(assetPackage) {
if (!this.isAssetPackage(assetPackage))
throw new TypeError('You are passing the argument "'+ assetPackage +'" and the addPackage function expects an AssetPackage.');
this.packages[assetPackage.name] = {
name: assetPackage.name,
assets: assetPackage.assets
};
}
PackageManager.prototype.isAssetPackage = function(val) {
return (this.isObject(val) && val.name && val.assets ? true : false);
}
PackageManager.prototype.isObject = function(val) {
return (typeof val === "object" && val !== null ? true : false);
}
export default PackageManager;
or simply let the API user handle the compiler:
function PackageManager() {
this.packages = {};
}
PackageManager.prototype.addPackage = function(assetPackage) {
Array.isArray(assetPackage) ? this.addPackages(assetPackage) : addAssetPackage(assetPackage);
}
PackageManager.prototype.addPackages = function(assetPackages) {
for(let i = 0; i < assetPackages.length; i++)
addAssetPackage(assetPackages[i]);
}
PackageManager.prototype.addAssetPackage = function(assetPackage) {
this.packages[assetPackage.name] = {
name: assetPackage.name,
assets: assetPackage.assets
};
}
export default PackageManager;
how do you handle this case in your JavaScript APIs?