如何实现泛型指定时参数必填、未指定时可选的TS函数
实现满足条件的TypeScript函数
可以通过函数重载来实现这个需求,定义两个不同的函数签名分别对应"未指定泛型"和"指定泛型"的场景:
// 重载1:未显式指定泛型时,参数arg可选 function TT(): void; // 重载2:显式指定泛型O时,参数arg为必填的O类型 function TT<O>(arg: O): void; // 函数实现体 function TT<O = unknown>(arg?: O): void { // 这里写你的函数逻辑 }
验证效果
TT()// 合法,匹配第一个重载签名TT<string>("hello")// 合法,匹配第二个重载签名TT<string>()// TypeScript报错,因为第二个重载要求必须传入arg参数
原理说明
函数重载会根据调用时的泛型指定情况和参数传入情况,自动匹配对应的签名:
- 当不指定泛型时,TypeScript会匹配第一个重载,允许不传参数;
- 当显式指定泛型
O时,TypeScript会优先匹配第二个重载,该签名强制要求传入类型为O的参数。
内容的提问来源于stack exchange,提问作者Islam Y-
相关产品推荐
相关产品推荐

