如何配置TypeScript强制类构造函数赋值readonly属性?
让TypeScript强制检查readonly属性的构造函数赋值
要实现你需要的检查效果,只需在tsconfig.json的compilerOptions中开启strictPropertyInitialization配置项即可。
具体说明:
- 开启
strictPropertyInitialization后,TypeScript会强制要求所有非可选的类属性(包括readonly属性)必须在构造函数内完成赋值,或者在属性定义时直接初始化。 - 你的示例代码中,
bar是readonly string类型但未被初始化,开启该配置后,tsc会触发如下类型错误:Property 'bar' has no initializer and is not definitely assigned in the constructor.
配置示例:
{ "compilerOptions": { // 推荐开启strict模式,它会自动包含strictPropertyInitialization等一系列严格检查 "strict": true, // 也可以单独开启该选项(如果不想开启全部strict检查) // "strictPropertyInitialization": true } }
特殊情况处理:
如果某些属性确实无法在构造函数初始化(比如依赖注入场景),可以通过非空断言!跳过检查,写法如下:
class Foo { private readonly bar!: string constructor() { // 后续通过其他方式赋值 } }
但这种方式不建议滥用,会绕过TypeScript的类型安全检查。
内容的提问来源于stack exchange,提问作者Keynan
相关产品推荐
相关产品推荐

