那么你可以简单地检查你收到作为参数对象的类型,然后检查这些值实际上有,像这样:
function foo(myObject) {
if (typeof myObject !== 'object') {
// doesn't match
return;
}
if (typeof myObject.Count === 'undefined') {
// no count property
}
}
但是,从你的问题,看来你想使该类型的对象应该作为一个参数发送更多的修正,而这也可以做在JavaScript中,做了如:
function MyParamOptions() {
// define properties here
this.persons = [];
Object.defineProperty(this, 'Count', {
get: function() {
return this.Names.length;
},
set: function() {
// dummy readonly
}
});
}
然后,你可以说
var options = new MyParamOptions();
options.persons.push({ firstName: 'bla', lastName: 'bla' });
实例化这个类的一个实例,并更改检查您的富功能里面像
function foo(myObject) {
if (myObject instanceof MyParamOptions) {
// here myObject is MyParamOptions, so you can access the persons array, the Count property etc...
}
}
// and call foo with your MyParamOptions
foo(options);
然而,这不会抛出编译任何警告时间,所以人们可以用任何参数调用你的函数。如果您在编译时查找错误,您可能会考虑使用TypeScript或类似技术,然后将您的TypeScript代码转换为javascript)
Javascript实际上并不像这样工作。您可以验证对象(请参阅下面的答案),但类型不像在C#等类型安全的语言中那样工作。最终,这是因为Javascript不是一种编译语言。 – Liam
会打字稿解决这个问题吗? – tatmanblue