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": falseconst env: { [key: string]: string } = {} export const mode = env.NODE_ENV
Kompiluje się czysto
Z włączoną
"noPropertyAccessFromIndexSignature": trueconst 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

