如何强制泛型函数参数类型为T | null?
约束泛型函数仅接受包含null的类型参数
要实现仅允许传入T | null类型(即包含null的联合类型)的泛型函数,可通过条件类型约束修改原函数定义:
修改后的函数代码
function foo<T>(val: null extends T ? T : never) { // 函数逻辑实现 }
原理说明
利用TypeScript的条件类型null extends T ? T : never做参数类型校验:
- 当传入的参数类型
T包含null(比如string | null、null、number | null | undefined),null extends T结果为true,参数类型保留为T,允许正常传入 - 当传入的是纯非
null类型(比如string、number),null extends T结果为false,参数类型变为never,触发编译错误
测试验证
不符合约束的情况(编译错误)
let fooNonNull: string = "foo" foo(fooNonNull) // 编译报错:类型'string'不能赋值给类型'never'
符合约束的情况(正常编译)
let fooNull: string | null = "foo"; foo(fooNull) // 无编译错误,正常执行
内容的提问来源于stack exchange,提问作者Sebastian Barth
相关产品推荐
相关产品推荐

