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

如何约束泛型函数参数仅接受包含null或undefined的类型

实现仅接受包含null/undefined类型参数的泛型函数

你可以通过泛型约束结合条件类型实现这个需求,核心逻辑是判断泛型参数T是否包含null或undefined,不满足则触发编译错误:

// 定义约束类型:检查T是否包含null或undefined
type MustIncludeNullish<T> = 
  null extends T ? unknown : 
  undefined extends T ? unknown : 
  never;

// 应用约束的泛型函数
function foo<T extends MustIncludeNullish<T>>(val: T) {
  // 函数逻辑写在这里
}

实现原理

  • MustIncludeNullish<T>会对泛型参数T做三层判断:
    1. 如果null是T的子类型(即T包含null),返回unknown(所有类型都能兼容unknown,约束生效);
    2. 如果undefined是T的子类型(即T包含undefined),同样返回unknown;
    3. 若两者都不满足(T是纯非空非undefined类型),返回never(普通类型无法兼容never,直接触发编译错误)。

测试案例

// ❌ 编译报错:类型'string'不满足约束'never'
const pureString = "hello";
foo(pureString);

// ✅ 编译正常:string | null 包含null
const strOrNull: string | null = "test";
foo(strOrNull);
foo(null);

// ✅ 编译正常:string | undefined 包含undefined
const strOrUndefined: string | undefined = "test";
foo(strOrUndefined);
foo(undefined);

// ✅ 编译正常:同时包含null和undefined
const strOrNullish: string | null | undefined = "test";
foo(strOrNullish);

内容的提问来源于stack exchange,提问作者Sebastian Barth

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 20:12:18