TypeScript如何声明可选属性在后续执行阶段已被明确定义
TypeScript非空值标识方案
你设想的!操作符是TypeScript原生支持的语法,名为非空断言操作符,作用就是向编译器声明对应值此时一定不为undefined/null,无需触发非空相关的类型报错。
使用示例
你示例的调用写法完全可以直接运行:
const foo=(name:string, address: SomeObject)=>{ console.log(address); } // !后缀即非空断言,告诉编译器user.address此时必然存在 foo(user.name, user.address!)
注意事项
- 非空断言仅作用于编译阶段,不会在运行时添加任何校验逻辑,如果实际运行时
user.address为undefined,依然会引发运行时错误,仅在你100%确认该位置值已被赋值时使用。 - 如果你希望更安全,也可以选择先做显式非空判断,TypeScript会自动收窄类型,无需额外断言:
if (user.address) { // 该分支内TS自动识别user.address为非空的SomeObject类型 foo(user.name, user.address) }
- 另一种等价实现是使用
as做类型强制转换:
foo(user.name, user.address as SomeObject)
内容的提问来源于stack exchange,提问作者Syarx
相关产品推荐
相关产品推荐

