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).

--strictPropertyInitialization

Se 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.

Relaterade artiklar