strictPropertyInitialization
Zadeklarowane pole musi zostać przypisane
Deklaracja `token: string` mówi, że właściwość jest stringiem. Przed tą flagą nic nie sprawdzało, czy kiedykolwiek nim została.
- Od
- TypeScript 2.7
- strict
- W strict
- W twoim tsconfigu
"strictPropertyInitialization": true- Skompilowane z
"strict": true
Ten sam fragment za każdym razem. Zmieniła się tylko opcja.
Z wyłączoną
"strictPropertyInitialization": falseexport class Session { token: string }
Kompiluje się czysto
Z włączoną
"strictPropertyInitialization": trueexport class Session { token: string }
Zgłasza TS2564
Dlaczego kompilator się tym przejmuje
Ciało klasy to jedyne miejsce w TypeScripcie, gdzie adnotacja typu i przypisanie są zapisane osobno, a w szczelinie między nimi mieszka `undefined`, któremu typ zaprzecza. Flaga zamyka ją, wymagając inicjalizatora, przypisania w konstruktorze albo asercji zdecydowanego przypisania `token!: string` — czyli tego, że bierzesz odpowiedzialność, zamiast żeby kompilator wierzył ci na słowo. Wymaga `strictNullChecks`, bo bez niego bycie `undefined` w ogóle nie jest sprzecznością.
Wniosek
`!` to nie naprawa. To notatka, że ty sprawdziłeś, a kompilator nie mógł.
Gdzie iść dalej
Opcji: 22

