强制泛型类型参数为 T 或 null

问题描述 投票:0回答:1

强制泛型函数参数为

T | null
,因此只能传递包含
T | null
类型的值:

function foo<T>(val: T) { ... }
let fooNonNullish: string = "foo"
foo(fooNonNullish) // should not compile because string cannot be null
let fooNullish: string | null = "foo";
foo(fooNullish) // should compile
typescript null
1个回答
1
投票

检查联合

T | null
是否扩展了类型
T
似乎创建了所需的行为:

type Nullish<T> = T | null extends T ? T : never; 

function foo<T>(val: Nullish<T>) { console.log(val); }

let fooNonNullish: string = "foo"
foo(fooNonNullish); // Error

let fooNullish: string | null = Math.random() > .5 ? "foo" : null;
foo(fooNullish) // OK

请注意,我必须在

fooNullish
变量的初始化中包含一个随机因子,以防止 TypeScript 急切地将参数缩小到
string

© www.soinside.com 2019 - 2024. All rights reserved.