我有一个category
,可以是undefined
。我声明一个包含其名称的变量。因此,其类型为string | undefined
。
我可以这样声明:
let categoryName = undefined;
if(category) {
categoryName = category.name;
}
但是有快捷方式语法吗?我正在寻找类似的东西:
const categoryName = category?.name
答案 0 :(得分:2)
否,nullish coalesce is a Stage 1 proposal和TypeScript的设计原则规定它们仅实现第3阶段的建议。因此,在提出该建议书(或类似的建议)之前,TypeScript不会具有该语法快捷方式。
答案 1 :(得分:1)
您可以使用&&
运算符。如果第一个操作数为真,则&&
运算符将返回第二个操作数。在这种情况下,这意味着如果category
不是undefined
(即真实),它将返回第二个表达式的值。如果category
为undefined
,则为假,因此返回第一个操作数的值(即未定义)
let categoryName: string | undefined;
declare let category :{ name: string} | undefined
categoryName = category && category.name;
如果您只是想忽略打字稿错误,并且可以合理确定该值不能为未定义状态,则可以使用not null断言运算符
categoryName = category!.name;
答案 2 :(得分:0)
当前,不可以。但是,您想要的?.
运算符位于optional-chaining proposal中,并且目前处于第1阶段。Typescript仅在被认为足够稳定的新提议时才开始实施新建议,而这些提议已被打字团队声明为{{ 3}}。
您可以使用&&
运算符,如果运算符为'falsy',则返回第一个参数,否则返回第二个参数
category && category.name
但是,这对于更复杂的嵌套案例(例如
)不是很好category && category.parentCategory && category.parentCategory.name
这会更干净
category?.parentCategory?.name
您可以使用!
运算符来断言变量不是undefined
或null
,但这通常不是您想要的,因为您将完全覆盖类型检查器
category!.name
答案 3 :(得分:-1)
您可以尝试
const categoryName = !isUndefined(category)?.name
其中isUndefined是从
导入的import { isUndefined } from 'util';