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

如何定义包含null的TypeScript泛型类(启用严格空检查)

解决方案

要在严格空检查下实现强制泛型类型必须包含null的泛型类,直接通过泛型约束把null纳入类型要求即可,同时保证兼容性和灵活性。

完整代码示例

// 可选:定义可空类型别名,简化后续写法
type Nullable<T> = T | null;

// 泛型基类:约束泛型参数必须是「任意类型 + null」的联合
class Model<Base extends Nullable<unknown>> {
    public value: Base = null as Base;
    public sthElse: Base = null as Base;
    public defaultValue: Base = null as Base;
}

// 子类用法示例:传入具体类型和null的联合
class UserModel extends Model<Nullable<{ id: number; name: string }>> {}
class StringModel extends Model<Nullable<string>> {}
class NumberModel extends Model<Nullable<number>> {}

// 下面这种写法会直接报错(不符合要求),因为泛型类型里没有null
// class InvalidModel extends Model<{ age: number }> {}

注意点

  1. 严格空检查适配:因为泛型约束确保了Base一定包含null,所以初始化时给属性赋值null是安全的,不会触发空检查错误。
  2. 支持多种类型:不管是对象、字符串、数字还是其他类型,都能和null组成联合类型传入,完全匹配API返回数据的场景。
  3. 类型安全保障:如果不小心传入不包含null的类型,TypeScript会立刻报错,避免不符合需求的用法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 22:45:54