如何实现函数简化TypeScript对象类型校验并更新类型
实现TypeScript类型安全的hasProp函数,用于对象属性检查与类型窄化
你需要的是一个能替代重复检查、同时帮TypeScript做类型窄化的工具函数,直接看实现:
函数实现
function hasProp<T extends object, K extends string>(obj: T, prop: K): obj is T & Record<K, unknown> { return typeof obj === 'object' && obj !== null && prop in obj; }
关键说明
- 用类型谓词(
obj is ...)告诉TypeScript:当函数返回true时,输入的对象一定包含指定属性 T extends object确保输入是对象类型(排除字符串、数字这类原始值)Record<K, unknown>表示对象包含K这个属性,属性类型设为unknown是因为我们只确认存在性,不确定具体类型
使用示例
对应你的场景,这样调用即可:
const myObject = transition.options().custom; // custom 类型为 any if (hasProp(myObject, 'isChanged')) { // 这里 myObject 会被TypeScript识别为包含 isChanged 属性的对象,类型安全 if (typeof myObject.isChanged === 'boolean') { // 可以进一步窄化属性类型,比如确认是布尔值后再做逻辑 // Do something } }
这样就把重复的三次检查封装成了可复用的函数,同时解决了any类型带来的类型不安全问题。
内容的提问来源于stack exchange,提问作者Zachu
相关产品推荐
相关产品推荐

