javascript - Varför får jag inga varningar om StrictNullChecks i typescript
Jag har följande kod i TypeScript:
interface Member {
name: string,
age?: number
}
class Person implements Member {
name: string;
constructor(name: string ){
this.name=name;
}
}
function bar(person: Member) {
return "Hello, " + person.name + " " + person.age;
}
let person = new Person("John");
console.log(bar(person));
Jag förväntas få Objektet är möjligtvis 'undefined'-varningen inuti bar-funktionen när jag deklarerar person.age eftersom inte varje Medlem kan ha ålder.
min TypeScript-konfiguration ser ut så här:
{
"compilerOptions": {
"module": "commonjs",
"target": "es5",
"sourceMap": true,
"strictNullChecks": true,
"outDir": "./built"
},
"include": [
"./src/**/*"
],
"exclude": [
"node_modules"
]
}
Någon idé om varför detta inte fungerar för mig? Jag använder WebStorm-editor!
Svar #1
Slå på "strict": true, i tsconfig.json för att aktivera denna varning.
Eller om du inte vill ha alla de strikta alternativen du behöver:
"strictNullChecks": true,
"strictPropertyInitialization": true,
Se dokumentationen för mer information
--strictNullCheck:
I strikt nullkontrolläge är värdena null och undefined inte i domänen för varje typ och kan endast tilldelas sig själva och any (det enda undantaget är att undefined också kan tilldelas void).
--strictPropertyInitializationSe till att icke-undefined klassattribut initieras i konstruktören. Detta alternativ kräver att --strictNullChecks är aktiverat för att träda i kraft.
Den andra är den du vill ha (men behöver strictNullChecks för att fungera)
Förresten, som @jayasai amerineni nämner, borde ditt exempel inte utlösa denna varning.
Svar #2
strictNullChecks kontrollerar att alla operationer som utförs på en egenskap leder till ett icke-null-värde. Men i funktionen bar skrivs bara person.age ut oavsett om det är null eller undefined. Om du skulle skriva person.age.toString() skulle TypeScript generera ett kompileringsfel.
