2017-11-15 15 views
0

Hey Ich habe ein Problem beim Nachschlagen von Strings in einer Klasse basierend auf Klasseneigenschaften in Typoskript.Suche nach Eigenschaftswert nach String

export class EventName { 
    public static LOGIN = "LOGIN"; 
    public static LOGOUT = "LOGOUT"; 
} 

Ich schaute online und es heißt, etwas wie eventName ['LOGIN'];

Jedoch gibt diese Eigenschaft den folgenden Fehlern

Element implizit einen ‚beliebigen‘ Typen hat, weil Typen ‚Typeof Eventname‘ keine Index-Signatur hat.

Ich versuchte dann in hinzufügen [key: string]: any; Aber das gibt mir immer noch den gleichen Fehler. Ich habe mich gefragt, ob jemand mich bitte auf das Problem hier hinweisen könnte, danke?

+1

Ich kann dies nicht im TypeScript Playground replizieren - könnten Sie genau zeigen, welcher Code Ihnen den Fehler gibt und welche Version von TypeScript Sie verwenden? https://www.typescriptlang.org/play/#src=class%20EventName%20%7B%0D%0A%20%20%20public%20static%20LOGIN%20%3D%20%22LOGIN%22%3B%0D % 0A% 20% 20% 20Öffentlich% 20Statisch% 20LOGOUT% 20% 3D% 20% 22LOGOUT% 22% 3B% 0D% 0A% 7D% 0D% 0A% 0D% 0Alet% 20x% 20% 3D% 20EventName% 5B'LOGIN '% 5D% 3B –

Antwort

1

Wenn Sie Ihr Beispiel eventName['LOGIN']; mit einem Instanz der EventName Klasse versuchen, werden Sie diesen Fehler (wenn Sie --noImplicitAny verwenden):

class EventName { 
    public static LOGIN = "LOGIN"; 
    public static LOGOUT = "LOGOUT"; 
} 

const eventName = new EventName(); 

// Element implicitly has an 'any' type because type 'EventName' has no index signature. 
const logout = eventName['LOGOUT']; 

Dies liegt daran, die Eigenschaften sind static und don ‚t zu einer Instanz gehören - so können Sie verwenden:

class EventName { 
    public static LOGIN = "LOGIN"; 
    public static LOGOUT = "LOGOUT"; 
} 

// login: string; 
const login = EventName['LOGIN']; 

Dies könnte ein gutes Beispiel dafür sein, warum die --noImplicitAny Flagge schrecklich nützlich ist.

+0

Danke! Perfekte Antwort – Seamy