JSDoc中!any作为参数类型是否合法?具体含义是什么?
关于
!any类型约束的合法性与含义解析 !any不是TypeScript的合法类型语法,不存在这种用来约束“非null/undefined任意类型”的写法。- TypeScript里的
!是非空断言操作符,它的作用是在表达式层面告诉编译器:“我确定这个值不会是null或undefined”,比如const num = maybeNum!;,但它不能用来修饰类型本身,不属于类型语法的一部分。 - 如果你想实现“排除null和undefined的任意类型”,正确的做法是使用
NonNullable<any>,但要注意:any本身就包含null、undefined以及所有类型,NonNullable<any>的结果依然是any,因为any的特殊性会覆盖非空约束。如果是针对具体类型(比如string | null),NonNullable<string | null>会得到string,这才会生效非空校验。 - VSCode里类型校验没生效,本质是因为
!any是无效语法,TypeScript编译器无法识别这种类型定义,自然不会产生你预期的校验效果。
内容的提问来源于stack exchange,提问作者SillyQuestion
相关产品推荐
相关产品推荐

