为什么在变量声明中使用按位或运算符?

mvk*_*oiw 2 typescript angular

我正在学习 Angular 并阅读文档,但我很困惑为什么在下面的变量声明中使用按位 OR 运算符product。这条线是什么product: Product | undefined意思?

export class ProductDetailsComponent implements OnInit {

  product: Product | undefined;
  /* ... */
}
Run Code Online (Sandbox Code Playgroud)

Ste*_*fan 5

在这种情况下,它不是 OR 运算符,而是“联合类型”。

在 TypeScript 中,联合类型变量是可以存储多种类型值(即数字、字符串等)的变量。

联合类型允许我们定义具有多种类型的变量。联合类型变量是使用类型之间的竖线(“|”)符号定义的。

来源: https: //howtodoinjava.com/typescript/union-types/

所以这意味着产品必须是Product或类型undefined。(未定义的部分仅在您strictNullChecks启用时才相关)。

另一种写法是

product?: Product;
Run Code Online (Sandbox Code Playgroud)

其中问号表示它是可选参数。

  • 只是注意/警告:您提供的“替代形式”并不严格等同。在 OP 的代码中,该属性肯定会存在,其值类型为“Product”或“undefined”。在您的替代形式中,该属性可能存在并具有前面提到的值之一,或者根本不存在。请参阅 https://www.typescriptlang.org/tsconfig#exactOptionalPropertyTypes (4认同)