反向TypeScript类型Guard

Roe*_*den 6 javascript typescript typescript2.0

我使用typescript 2.0.0--strictNullChecks和以下类型的后卫:

function isNotOk(value: any): value is null | undefined {
  if (typeof value === 'number') {
    return !isFinite(value);
  } else {
    return value === null || value === undefined;
  }
}
Run Code Online (Sandbox Code Playgroud)

其无效null,undefined,NaNInfinite.我想要反过来:

export function isOk(value: any): value is not null | undefined {
  return !isNotOk(value);
}
Run Code Online (Sandbox Code Playgroud)

当然,这种语法不起作用.有没有一种已知的方法来实现这一目标?

Roe*_*den 10

我偶然发现了答案; 仿制药.只是以相反的方式缩小:

function isOk<T>(value: T | null | undefined): value is T {
  return !isNotOk(value);
}
Run Code Online (Sandbox Code Playgroud)

  • 唯一的问题是,如果“T”是“any”,那么类型保护的“else”部分会认为“value”是“never”,但它实际上应该是“null |”。未定义`。 (2认同)