TypeScript无构造函数类的对象初始化及const使用疑问
TypeScript类实例化与const/let使用问题解答
咱们拆分你遇到的两个问题逐一解决:
1. 先搞定expecting a comma的语法错误
你写的new C1 { prop1: 'aaa', prop2: 'bbb' }是语法错误——TypeScript里类的实例化必须带括号(),而且你的C1没有定义接收参数的构造函数,直接传对象字面量也会报错。针对这种无构造函数的类,有两种正确的初始化方式:
方式一:先实例化再赋值属性
const obj = new C1(); obj.prop1 = 'aaa'; obj.prop2 = 'bbb';
方式二:用类型断言快速创建符合类类型的对象(无需new)
如果只是需要一个符合C1类型结构的对象(不需要类的方法等实例特性),可以直接用对象字面量加类型断言:
const obj = { prop1: 'aaa', prop2: 'bbb' } as C1;
当然,如果你想支持直接传参数初始化,也可以给C1加个构造函数,用起来更顺手:
export class C1 { prop1: string; prop2: string; // 添加构造函数 constructor(prop1: string, prop2: string) { this.prop1 = prop1; this.prop2 = prop2; } } // 此时实例化就不会报错了 const obj = new C1('aaa', 'bbb');
2. 关于是否必须使用const的问题
TSLint提示你用const替代let,是因为变量obj后续没有被重新赋值的需求。从语法层面来说,你不是必须用const——强行用let也能通过TypeScript编译,只是会触发TSLint的规范提示。
但从代码规范和最佳实践的角度,非常推荐用const:
const明确表达了“这个变量不会被重新赋值”的语义,让其他阅读代码的人一眼就能明白变量的用途- 能避免后续不小心对
obj进行重新赋值的低级错误
如果实在不想用const,你可以在TSLint配置里禁用prefer-const这条规则,但不建议这么做,遵循规范能让代码更健壮、更易维护。
内容的提问来源于stack exchange,提问作者annepic
相关产品推荐
相关产品推荐

