TypeScript如何实现类似C# NotNullWhen特性的空值校验方法
你可以通过TypeScript的自定义类型守卫特性实现和C# [NotNullWhen] 特性等效的效果,只需要将方法的返回值标注为类型谓词即可。
正确的isNullOrEmpty方法定义
function isNullOrEmpty(s: string | undefined | null): s is null | undefined | "" { return s === null || s === undefined || s.length === 0; }
这里的s is null | undefined | ""是类型谓词,它会告诉TypeScript类型系统:当该方法返回true时,输入参数s的类型为null | undefined | 空字符串;反之当方法返回false时,s的类型会被自动收窄为非空的string类型,不需要额外的空判断就可以直接访问其属性。
验证示例
// 假设getUserInput返回值类型为 string | undefined | null const userInput = getUserInput(); if (!isNullOrEmpty(userInput)) { const messageLength = userInput.length; // 不再触发类型报错 }
扩展:泛型通用版本(支持任意类型判断)
如果需要适配除字符串外其他类型的空值判断,可以使用泛型实现通用方法:
function isNullOrEmpty<T>(value: T | undefined | null): value is T extends string ? "" | null | undefined : null | undefined { if (typeof value === "string") { return value.length === 0; } return value === null || value === undefined; }
内容的提问来源于stack exchange,提问作者Mikkel R. Lund
相关产品推荐
相关产品推荐

