TypeScript如何为泛型指定精确字段?限定联合类型函数入参
解决方案
可以直接使用TypeScript内置的Extract工具类型,从联合类型中精准提取符合条件的分支类型,无需手动拆分原联合类型:
type Some = {field: 'add'} | {field:'remove'}; // 提取Some中field为'add'的类型分支 function add(value: Extract<Some, { field: 'add' }>) {} // 提取Some中field为'remove'的类型分支 function remove(value: Extract<Some, { field: 'remove' }>) {}
验证效果
add({ field: 'add' }); // ✅ 类型校验通过 add({ field: 'remove' }); // ❌ 类型报错,不符合参数要求 remove({ field: 'remove' }); // ✅ 类型校验通过 remove({ field: 'add' }); // ❌ 类型报错,不符合参数要求
Extract<T, U>的作用是从类型T中筛选出所有可以赋值给U的成员类型,刚好适配你从Zod infer得到联合类型、不想拆分原类型的场景,直接通过字段条件就能锁定函数允许接收的参数类型。
内容的提问来源于stack exchange,提问作者Akuma
相关产品推荐
相关产品推荐

