如何定义包含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 }> {}
注意点
- 严格空检查适配:因为泛型约束确保了
Base一定包含null,所以初始化时给属性赋值null是安全的,不会触发空检查错误。 - 支持多种类型:不管是对象、字符串、数字还是其他类型,都能和null组成联合类型传入,完全匹配API返回数据的场景。
- 类型安全保障:如果不小心传入不包含null的类型,TypeScript会立刻报错,避免不符合需求的用法。
内容的提问来源于stack exchange,提问作者PatrykD
相关产品推荐
相关产品推荐

