javascript - Typescript kontrollerar inte objektets egenskaps existens när det är typat som [key: string]


Jag har skrivit min objekt av objekt som:

export interface ObjectInterface {
  [key: string]: SomeOtherObjectInterface;
}

Låt oss då säga att jag har ett objekt som:

const obj: ObjectInterface = {
   a: ...,
   b: ...,
}

När jag sedan vill komma åt någon objekt-egenskap är det inte typ-säkert:

const x = obj.dsdssdsdsds;

Det finns inget fel i mitt IDE.

När jag tar bort typen från obj kastar det ett fel korrekt. Vad kan göras här för att använda vår typ men ändå få fel som Property 'dsds' does not exist on type......

Svar #1

Typescript 4.1-beta har löst detta problem.

Detta är ett nytt alternativ: --noUncheckedIndexedAccess.

Att aktivera noUncheckedIndexedAccess kommer att lägga till undefined till alla odeklarerade fält i typen.

Du kan testa det på TypeScript-lekplatsen.

Läs mer: Tillkännager TypeScript 4.1 Beta - Pedantiska indexsignaturkontroller (--noUncheckedIndexedAccess)

Förresten är samma problem med arrayer. Om du får åtkomst till arrayen via index får du inte något TypeScript-fel, även om det indexet inte existerar. Lyckligtvis löser det här alternativet även arrayproblemet.


P. S. 4.1 har släppts - läs mer om noUncheckedIndexedAccess

Relaterade artiklar