2016-09-25 5 views
1
type MyStructure = Object[] | Object; 

const myStructure: MyStructure = [{ foo: "bar" }]; 

myStructure.map(); // Property 'map' does not exist on type 'MyStructure'. any 

Die Bibliothek liefert entweder ein Objekt oder ein Array dieses Objekts. Wie kann ich das tippen?Eigenschaft 'map' existiert nicht für Typ Objekt

EDIT

Und wie kann ich auf Eigenschaften wie myStructure["foo"] bei myStructure wird ein Objekt sein?

Antwort

0

Da Ihr Typ bedeutet, dass Sie ein Objekt haben könnten, oder Sie könnten ein Array haben; TypeScript kann nicht bestimmen, welche Mitglieder geeignet sind.

Um dies zu testen aus, Ihre Art ändern, und Sie werden die map Methode ist jetzt verfügbar unter:

type MyStructure = Object[]; 

In Ihrem Fall die tatsächliche Lösung wird es sein, verwenden Sie eine Schutzvorrichtung zu überprüfen, dass Sie ein Array vor dem Versuch, die map Methode zu verwenden.

if (myStructure instanceof Array) { 
    myStructure.map((val, idx, []) => { }); 
} 

Sie auch Ihr Problem mit einem etwas andere Definition von MyStructure, zum Beispiel lösen könnte:

type MyStructure = any[] | any; 

Oder die schmaleren:

class Test { 
    foo: string; 
} 

type MyStructure = Test[] | Test; 
+0

Ich habe tatsächlich diese mit _.isArray (), was in TypeScript natürlich nicht funktioniert ... Danke für deine Hilfe! – kraftwer1

+1

@Sohnee, weißt du, warum das funktioniert? Tippe MyStructure = Nummer [] | Nummer; '[Spielplatz] (https://www.typescriptlang.org/play/index.html#src=%0D%0Atype%20MyStructure%20%3D%20number%5B%5D%20%7C%20number%3B% 0D% 0A% 0D% 0Alet% 20myStruktur% 3A% 20MyStruktur% 20% 3D% 20% 5B3% 5D% 3B% 0D% 0A% 0D% 0AmyStructure.map (n% 20% 3D% 3E% 20n * 2)% 3B % 0D% 0AmyStruktur% 20% 3D% 205% 3B)? –

+0

Es ist nur "Objekt", das Ihnen das Problem verursacht. Sehen Sie sich die zusätzlichen zwei Beispiele für die Verwendung von 'any' oder das (wahrscheinlich nützlichere) Beispiel mit einer Klasse an, die alles definiert, was Sie innerhalb der map-Methode verwenden (Sie erhalten dann bessere Typinformationen innerhalb der Funktion, die Sie verwenden). – Fenton

Verwandte Themen