Przejdź do treści
webtype.orgwebtype.orgtsconfig

    ↑↓ ruch · ⏎ otwórz · esc zamknij

    tsconfig

    noPropertyAccessFromIndexSignature

    Dostęp przez kropkę znaczy zadeklarowane

    Rezerwuje `obj.key` dla właściwości faktycznie zadeklarowanych i spycha wszystko z sygnatury indeksowej do `obj["key"]`.

    Od
    TypeScript 4.2
    strict
    Poza strict
    W twoim tsconfigu
    "noPropertyAccessFromIndexSignature": true

    Ten sam fragment za każdym razem. Zmieniła się tylko opcja.

    Z wyłączoną

    "noPropertyAccessFromIndexSignature": false
    const env: { [key: string]: string } = {}
    
    export const mode = env.NODE_ENV

    Kompiluje się czysto

    Z włączoną

    "noPropertyAccessFromIndexSignature": true
    const env: { [key: string]: string } = {}
    
    export const mode = env.NODE_ENV

    Zgłasza TS4111

    Dlaczego kompilator się tym przejmuje

    To reguła notacji, a nie poprawności, i zasługuje na swoje miejsce przez to, co czytelnik może potem wywnioskować: z nią kropka znaczy, że ktoś tę właściwość zapisał, a nawias klamrowy — że klucz jest danymi. Bez niej `env.NODE_ENV` i `config.timeout` wyglądają identycznie, a tylko jedno z nich jest z czymkolwiek porównywane. Naturalnie łączy się z `noUncheckedIndexedAccess`, które dokłada drugą połowę: że wartości może tam w ogóle nie być.

    Wniosek

    Kropka dla tego, co deklaruje typ; nawias dla tego, co akurat trzymają dane.

    Gdzie iść dalej

    Opcji: 22