为何TypeScript接口未提示缺失必填属性?
问题原因解析
你没收到错误提示的核心原因是使用了as Keyword类型断言,这相当于直接给TypeScript“开绿灯”:强制让TS认定这个不完整的对象就是Keyword类型,完全跳过了原本的属性完整性校验。
TypeScript对字面量对象的类型校验本来是严格的——如果直接把缺属性的对象赋值给Keyword类型变量,或者推入明确标注为Keyword[]的数组,TS都会立刻报错。但as断言会直接覆盖这种校验逻辑,TS会默认你比它更清楚这个对象的类型,所以不会再提示错误。
另外还有一个细节:你定义的keywords数组是any[]类型(因为初始化时没指定类型),就算不用类型断言,直接推入选填属性的对象,TS也不会报错。如果想让数组严格校验元素类型,应该把数组定义为Keyword[]:
const keywords: Keyword[] = [];
这种情况下,只要你不用类型断言,推入缺属性的对象时,TS就会正常抛出错误,告诉你缺失了哪些必填属性。
内容的提问来源于stack exchange,提问作者TinyTiger
相关产品推荐
相关产品推荐

