Chỉnh sửa: Bảy năm sau, câu trả lời này vẫn thỉnh thoảng được nâng cấp. Sẽ tốt thôi nếu bạn đang tìm kiếm kiểm tra thời gian chạy, nhưng bây giờ tôi sẽ khuyên bạn nên kiểm tra kiểu thời gian biên dịch bằng cách sử dụng Typecript hoặc có thể là Flow. Xem https://stackoverflow.com/a/31420719/610585 ở trên để biết thêm.
Câu trả lời gốc:
Nó không được tích hợp vào ngôn ngữ, nhưng bạn có thể tự làm điều đó khá dễ dàng. Câu trả lời của Vibhu là những gì tôi sẽ xem xét cách kiểm tra loại điển hình trong Javascript. Nếu bạn muốn một cái gì đó khái quát hơn, hãy thử một cái gì đó như thế này: (chỉ là một ví dụ để bạn bắt đầu)
typedFunction = function(paramsList, f){
//optionally, ensure that typedFunction is being called properly -- here's a start:
if (!(paramsList instanceof Array)) throw Error('invalid argument: paramsList must be an array');
//the type-checked function
return function(){
for(var i=0,p,arg;p=paramsList[i],arg=arguments[i],i<paramsList.length; i++){
if (typeof p === 'string'){
if (typeof arg !== p) throw new Error('expected type ' + p + ', got ' + typeof arg);
}
else { //function
if (!(arg instanceof p)) throw new Error('expected type ' + String(p).replace(/\s*\{.*/, '') + ', got ' + typeof arg);
}
}
//type checking passed; call the function itself
return f.apply(this, arguments);
}
}
//usage:
var ds = typedFunction([Date, 'string'], function(d, s){
console.log(d.toDateString(), s.substr(0));
});
ds('notadate', 'test');
//Error: expected type function Date(), got string
ds();
//Error: expected type function Date(), got undefined
ds(new Date(), 42);
//Error: expected type string, got number
ds(new Date(), 'success');
//Fri Jun 14 2013 success