用于转换可空性的类型注解

Type annotation for converting nullability

我想要一个可以删除值的可空性的函数(如果该值实际上为空则抛出异常),但我似乎无法获得正确的类型注释。我的第一次尝试是:

/**
 * @param {?T} obj
 * @param {string} message
 * @return {!T}
 * @template T
 */
function checkNotNull(obj, message) {
  if (obj === null) {
    throw message;
  } else {
    return obj;
  }
}

不过这似乎不起作用。如果我像 foo(checkNotNull(someVar)) 那样使用它(其中 foo() 需要一个不可为 null 的参数),我仍然会收到 TYPE_MISMATCH 错误(基本上是说该参数仍然被标记为可为 null)。

有没有办法真正做到这一点?或者我是否需要继续输入手动空值检查,然后再输入显式类型提示?

这在当前的实现中是不可能的。计划中有几处更改允许这样做,但没有任何内在的变化。