我通过编写这样的类引入了一个错误:
class SomeClass {
private readonly item: string;
constructor(item: string) {
// bug, item is never assigned
}
public getInfo(): string {
return this.item; // always returns `undefined`
}
}
该项目从未分配,因此每次对getInfo()
的调用都将返回undefined
。这段代码可以成功编译。
我当前项目的代码风格是通过tslint的no-parameter-properties
规则来阻止使用简写构造函数,因此我不能这样做:
class SomeClass {
public constructor(private readonly item: string) {
}
public getInfo() {
return this.item;
}
}
由于tsconfig的strictNullChecks
设置,我期望tsc会引发错误。
有没有一种方法可以使打字稿检测到该错误并将其编译标记为错误?
这是我当前的tsconfig.json
编译器选项:
"compilerOptions": {
"target": "ES6",
"lib": [
"es6",
"es2017",
"DOM"
],
"module": "commonjs",
"pretty": true,
"outDir": "dist",
"sourceMap": true,
"experimentalDecorators": true,
"emitDecoratorMetadata": true,
"strictNullChecks": true,
"forceConsistentCasingInFileNames": true,
}
答案 0 :(得分:1)
如果tsc> = 2.7.1,则您正在寻找compiler options
--strict
启用所有严格类型检查选项。启用
--strict
会启用--noImplicitAny
,--noImplicitThis
,--alwaysStrict
,--strictNullChecks
,--strictFunctionTypes
和--strictPropertyInitialization
。
因为它包含所有严格的规则集。
或更具体地说
--strictPropertyInitialization
因为它是针对您的用例而设计的:
确保在类中初始化非未定义的类属性 构造函数。此选项需要在
--strictNullChecks
中启用 才能生效。
使用该设置,tsc现在将抛出:
src/SomeClass.ts:2:22 - error TS2564: Property 'item' has no initializer and is not definitely assigned in the constructor.
2 private readonly item: string;
~~~~