如何为函数或对象添加类型约束以确保参数值一致?
如何让TypeScript强制函数参数/对象属性值一致并提供类型提示
要实现你需要的类型约束,不用依赖重载(重载只适合固定少量值的场景),用泛型就能完美解决——泛型可以捕获传入值的具体字面量类型,从而强制两个参数/属性必须匹配。
情况1:两个独立参数
定义函数时使用泛型T约束为number,让TypeScript自动推断第一个参数的具体数值类型,第二个参数必须和该类型一致:
function myfn<T extends number>(a: T, b: T) { // 函数逻辑 } myfn(12333, 12333); // ✅ 合法,类型匹配 myfn(12333, 222); // ❌ 不合法,类型不匹配(T被推断为12333,第二个参数是222)
情况2:传入包含两个属性的对象
同样用泛型T捕获val_1的具体数值类型,强制val_2必须和val_1的类型一致:
function myfn<T extends number>(options: { val_1: T; val_2: T }) { // 函数逻辑 } myfn({ val_1: 12333, val_2: 12333, }); // ✅ 合法 myfn({ val_1: 12333, val_2: 222, }); // ❌ 不合法
这种方案的优势在于:
- 不需要写大量重载代码,适配所有数值类型
- 同样适用于string、boolean等其他基础类型,只要调整泛型约束即可
- TypeScript会在开发阶段即时给出类型错误提示,提前拦截不合法调用
内容的提问来源于stack exchange,提问作者Profesor08
相关产品推荐
相关产品推荐

