TypeScript函数参数的显式类型校验问题
TypeScript强制函数参数数量匹配的解决方案
你定义的函数类型:
type Func = (param1: string, param2: number) => Promise<void>;
当前TypeScript允许少参数的函数赋值给Func,这是因为TS的函数兼容性规则:当一个函数被赋值给另一个函数类型时,只要源函数能处理目标函数的所有调用场景(即源函数可以忽略多余参数,不会触发运行错误),就会被认为兼容。比如调用Func类型的函数时一定会传入string和number,f1、f2只是不接收这些参数,不会引发问题,所以TS不报错。
如果需要强制校验参数数量,确保函数必须声明所有指定参数,可以用元组类型结合剩余参数来重新定义Func:
type Func = (...args: [string, number]) => Promise<void>;
此时再赋值少参数的函数就会触发TS错误:
const f1: Func = async () => {}; // 报错:参数数量不足,需要2个,得到0个 const f2: Func = async (param1: string) => {}; // 报错:参数数量不足,需要2个,得到1个 const f3: Func = async (param1: number) => {}; // 报错:类型不兼容(原错误保留)
这种方式通过元组严格限定了参数的数量和类型,完全满足你需要的校验规则。
内容的提问来源于stack exchange,提问作者therealyubraj
相关产品推荐
相关产品推荐

