Przejdź do treści
webtype.orgwebtype.orgtsconfig

    ↑↓ ruch · ⏎ otwórz · esc zamknij

    tsconfig

    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": false
    export class Session {
      token: string
    }

    Kompiluje się czysto

    Z włączoną

    "strictPropertyInitialization": true
    export 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