2016-12-16 6 views
5

Ich versuche, einem vorhandenen Code Typ Anmerkungen hinzuzufügen, und ich habe eine Array-Instanz, die als ein Objekt mit benutzerdefinierten Eigenschaften verdoppelt wird. So wie:Ist es möglich, Arrays mit benutzerdefinierten Eigenschaften zu kommentieren?

const foo = []; 
foo[0] = 13; 
foo.push(42); 

foo.superLevel = 'extreme'; // Flow complains about this 

dachte ich, ich könnte eine neue Art SuperArray, etwas entlang der Linien von diesem genannt erklären:

type SuperArray = Array<number> & { 
    superLevel: string, 
} 
const foo: SuperArray = []; 
// ... 

(View on flowtype.org/try)

Aber das funktioniert auch nicht. Ich habe Goggled und blätterte durch die Dokumente, und fand keine Antwort auf

A) wird das überhaupt unterstützt?
B) Wenn ja, wie notieren Sie es.

Antwort

1

Jemand hat eine hilfreiche und informative Antwort (die ich abgestimmt habe) gepostet, aber es scheint verschwunden zu sein - vielleicht, weil ich darauf hingewiesen habe, dass es die ursprüngliche Frage nicht genau beantwortet hat, obwohl es einen schönen Workaround bietet.

Wie dem auch sei, schlug sie den Code umschreiben SuperArray als eine Klasse zu definieren, die Array und fügt Requisiten erweitert ...

class SuperArray extends Array<number> { 
    superLevel: string 
} 

const foo = new SuperArray(); 

(Explore on Flowtype.org/try)

Es ist eine schöne, saubere Art und Weise, aber ich war vor allem daran interessiert, herauszufinden, ob die Annotation des ursprünglichen Musters möglich war - wie in einem Fall, in dem man sich darauf beschränkt, eine eigenständige Deklaration zu schreiben, um ein Modul eines Drittanbieters zu beschreiben.

+1

Die Antwort kam von mir, und ich löschte es genau aus dem Grund, den Sie genannt haben. Ich dachte, wenn es nicht gut passt, dann lösche ich besser die Antwort, um die Wahrscheinlichkeit zu erhöhen, dass jemand mit mehr Einblick in Flow die Frage entdeckt. – Tomalak

+0

Ah, ich verstehe. Es ist jedoch auch nützlich, alternative Ansätze zu dokumentieren. –

Verwandte Themen