我是JS开发人员,也是TS的新手。如果我有以下代码:
let corners = Boolean(checkTypes[userAccess]);如果我把它改为:
let corners = Boolean(checkTypes![userAccess]);为什么会对此皱眉头?我有一条评论说非空断言不是运行时检查,那么它们什么时候会发生?
发布于 2022-11-09 15:27:56
非空断言不是在运行时完成的?
正确,JavaScript代码将只是:
let corners = Boolean(checkTypes[userAccess]);因此,如果...and为空,则该代码将抛出。
那他们什么时候会发生?
除非你给他们编码否则他们不会的。类型断言就是:断言。您向TypeScript保证,您知道知道断言是正确的。TypeScript不会插入代码来检查您是否正确。你断言你是对的。
给你的一些选择:
null和undefined抛出新错误(message?Expected non-nullish value);}}
那么您的代码将是:
assertIsNotNullish(checkTypes,"checkTypes出乎意料地为空“);让角点=布尔(CheckTypesuserAccess);//不需要断言false,如果checkTypes是空的,让角点=布尔(checkTypes?.userAccess?// ^null和undefined }
然后
让角点= isNotNullish(checkTypes)?布尔值(CheckTypesuserAccess):false;//或true (如果应该是默认的)https://stackoverflow.com/questions/74377220
复制相似问题