JavaScript中如何实现函数签名
在JavaScript中,虽然不像静态类型语言(如Java、C++)那样原生支持函数签名,但可以通过多种方式模拟实现类似功能
1. 类型检查库(如 typescript 或 flow )
function add(a: number, b: number): number {
return a + b;
}
add(1, 2); // 正确
add('1', 2); // 编译错误,参数类型不匹配
Flow:Facebook开发的JavaScript类型检查器,使用注释方式添加类型信息。
// @flowfunction add(a: number, b: number): number {
return a + b;
}
add(1, 2);
add('1', 2); // Flow会提示类型错误
2. 手动类型检查
在函数内部手动检查参数类型,确保传入参数符合预期。
function add(a, b) {
if (typeof a!== 'number' || typeof b!== 'number') {
throw new TypeError('Both arguments must be numbers');
}
return a + b;
}
add(1, 2);
try {
add('1', 2);
} catch (error) {
console.error(error.message);
}
3. 利用函数.length 属性
length 属性表示函数定义的参数个数。可以在函数内部检查实际传入参数个数是否与预期相符。
function greet(name, greeting) {
if (arguments.length!== greet.length) {
throw new Error('Expected 2 arguments');
}
return `${greeting}, ${name}!`;
}
try {
greet('John');
} catch (error) {
console.error(error.message);
}
4.函数重载模拟
function print(value) {
if (typeof value ==='string') {
console.log(`String: ${value}`);
}
else if (typeof value === 'number') {
console.log(`Number: ${value}`);
}
}
print('HelloWorld');
print(985);