You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 15:27:03