使用布尔常量检查是否定义了参数

时间:2018-07-12 11:40:41

标签: typescript

使用Typescript 2.8.3,我不明白为什么以下代码无法获取在if块中定义了params的原因。

const testFunction = (params?: string) => {
  const paramIsDefined = typeof params !== 'undefined';
  if (paramIsDefined) {
    console.log(params.length);
  }
};

我收到此错误:     TS2532:params变量的console.log行上的对象可能是'undefined'。

此代码有效:

const testFunction = (params?: string) => {
  if (typeof params !== 'undefined') {
    console.log(params.length);
  }
};

我不明白/做错什么了吗?

1 个答案:

答案 0 :(得分:1)

构造:

if (typeof params !== 'undefined') {
    console.log(params.length);
}

是类型防护,因此会影响params的类型。

if (paramIsDefined)只是一个if语句,确实要检查的布尔值来自类型检查,但是编译器根本不遵循该值。如果您想将params形式的string|undefined的类型缩小到string,则需要使用类型保护构造或使用断言