在布尔检查后传播联合类型中省略的类型
Propagate omitted types in union type after a boolean check
在打字稿中,将正确输入以下内容:
let v: number | null | undefined;
if(v === null || v === undefined) return;
// v is typed as `number`
const v2 = v + 2;
不过,假设我们为 null
和 undefined
检查创建了一个辅助函数。 Typescript 会抱怨这个:
let v: number | null | undefined;
const isNull = (v: number | null | undefined) => v === null || v === undefined;
if(isNull(v)) return;
// v is typed as `number | null | undefined`
const v2 = v + 2;
有什么方法可以从辅助函数 isNull
向上传播 null
和 undefined
的相等性检查?
我想可以用 v!
覆盖它,但似乎 hacky/dangerous 因为现在两者是分离的。
您可以将 type predicate v is null | undefined
添加到 isNull
。
const isNull =
(v: number | null | undefined): v is null | undefined => v === null || v === undefined;
在打字稿中,将正确输入以下内容:
let v: number | null | undefined;
if(v === null || v === undefined) return;
// v is typed as `number`
const v2 = v + 2;
不过,假设我们为 null
和 undefined
检查创建了一个辅助函数。 Typescript 会抱怨这个:
let v: number | null | undefined;
const isNull = (v: number | null | undefined) => v === null || v === undefined;
if(isNull(v)) return;
// v is typed as `number | null | undefined`
const v2 = v + 2;
有什么方法可以从辅助函数 isNull
向上传播 null
和 undefined
的相等性检查?
我想可以用 v!
覆盖它,但似乎 hacky/dangerous 因为现在两者是分离的。
您可以将 type predicate v is null | undefined
添加到 isNull
。
const isNull =
(v: number | null | undefined): v is null | undefined => v === null || v === undefined;