TypeScript是Bug还是特性?联合类型笔误引发非预期类型报错
解答
结论
这是TypeScript的预设特性,不是编译器Bug。
报错原因
你在定义Type属性的联合类型时,误把最后一个联合分隔符|写成了逗号,触发了TypeScript接口的属性分隔规则:在interface定义中,逗号、分号、换行都可以作为不同属性的分隔标识。
你写错的代码行:
Type: 'casual' | 'pro' | 'titan' | 'nolife', 'YouDidNotDeclare';
会被编译器解析为两个独立的属性声明:
- 名为
Type的属性,类型为'casual' | 'pro' | 'titan' | 'nolife'联合类型 - 名为
YouDidNotDeclare的必填属性,你没有给该属性加可选标记?,因此实例化时必须传入该属性才能符合类型约束,这也是你看到缺失属性报错的原因。
该特性的适用场景
支持字符串字面量作为接口属性名的设计,主要用于以下场景:
- 定义包含特殊字符、空格、不符合JavaScript标识符命名规则的属性类型,比如
'order-id': string、'收货地址': string - 约束第三方接口、后端返回的非常规命名字段的类型,避免类型校验失效
- 声明和枚举值、常量字符串绑定的属性类型,提升类型检查的严格性
内容的提问来源于stack exchange,提问作者Travis Sowoolu
相关产品推荐
相关产品推荐

