TypeScript如何声明至少含指定属性其余任意的函数参数类型
TypeScript 约束对象必填属性的类型声明方法
不要给参数设置any类型——any会跳过所有类型校验,自然无法触发缺失属性的报错。你只需要在参数类型里明确声明必填的p属性即可,TypeScript 采用结构化类型规则,会自动校验传入对象是否满足该必填项要求,同时允许对象携带其他任意额外属性,完全匹配你的需求。
正确写法
直接在参数位置声明必填属性结构即可:
function ofInterest(param: { p: unknown }) { // 此处可正常访问 param.p,TS 会提供对应类型提示 const target = param.p // 其余业务计算逻辑 }
如果你明确知道
p属性的具体类型,直接把unknown替换成对应类型即可,比如p: string、p: number都可以。
如果这个参数结构需要在多处复用,也可以把必填结构抽成独立的接口或类型别名,效果完全一致:
interface IHasP { p: unknown } function ofInterest(param: IHasP) { const target = param.p // 业务逻辑 }
校验效果
- 传入对象包含
p属性时,即使携带其他额外属性,类型检查也会正常通过:
// 合法:包含必填p属性,额外的q、r属性不会触发报错 const validParam = { p: 'demo value', q: '', r: 0 } ofInterest(validParam)
- 传入对象缺失
p属性时,TS 会直接抛出类型错误:
const invalidParam = { q: '', r: 0 } // 抛出类型错误:类型"{ q: string; r: number; }"中缺少属性"p" ofInterest(invalidParam)
内容的提问来源于stack exchange,提问作者Osmanys Fuentes-Lombá
相关产品推荐
相关产品推荐

