Sto scrivendo un'API in JavaScript e sono confuso se dovrei controllare se l'utente API mi sta comunicando il tipo corretto su cui l'API si aspetta di funzionare. In realtà non è il tipo, ma se mi passi l'oggetto con le proprietà su cui funziona l'API. È una buona pratica per me emettere un errore se l'utente non passa un oggetto con le proprietà previste per l'API, o dovrei lasciarlo per conto del compilatore JavaScript?
Dovrei controllare il tipo in questo modo:
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;
o semplicemente lasciare che l'utente API gestisca il compilatore:
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;
come gestisci questo caso nelle tue API JavaScript?