Typescript strekken object module

stemmen
3

Wat ik wil doen is echt vergelijkbaar met deze en deze , behalve ik probeer om erachter te komen hoe je een ArrayExtension in een module te zetten.

Ik ben op zoek naar iets wat lijkt op de manier waarop C # extension methods werken, op die manier kan ik alleen de module te importeren te krijgen en ik zal mijn extra methoden te hebben. De links I aan te tonen, hoe u een bestaand object te verlengen, maar ik heb niet in staat om erachter te komen hoe om te kapselen, die in een module geweest.

De vraag is gesteld op 11/10/2012 om 01:52
bron van user
In andere talen...                            


2 antwoorden

stemmen
1

Als u zich richt non-browser omgevingen zoals node.js zal dit mogelijk zijn, omdat je in staat om verwijzingen naar de wereldwijde leden van uw module, zoals voorbij zal zijn Array, met andere modules. Die andere modules kunnen trek de doorgegeven object en / of het prototype extra functionaliteit die alleen toegankelijk is voor de aanroepende module zijn. Andere modules zou hebben om hetzelfde te doen met het oog op deze extensies te krijgen; daarom zijn conflicten tot een minimum beperkt, aangezien de invoer zijn expliciet.

Echter, in de browser-omgevingen is dit niet het geval, aangezien er slechts één windowobject en eventuele wijzigingen aan haar leden overal beschikbaar zijn. Zodra een van uw modules uitgebreid Arraydie extensies beschikbaar zou zijn voor alle andere modules - het vergroten van de mogelijkheid van conflicten en het maken van de code moeilijker te beredeneren.

Met dat gezegd, zijn er patronen in JS, en daarom typoscript, die moet bereiken wat je wilt. Een voorbeeld van zo'n patroon is de 'mixin' patroon waarmee u te voegen op extra functionaliteit op een object instantie basis. Kon herbruikbare code scheiden in mixin modules die vervolgens constructeurs kan worden toegepast op een object wanneer nodig of zelfs automatisch. Neem een kijkje op deze voor een fatsoenlijke overzicht en implementatie voorbeelden: http://javascriptweblog.wordpress.com/2011/05/31/a-fresh-look-at-javascript-mixins/

antwoordde op 01/11/2012 om 05:48
bron van user

stemmen
0

Als je probeert uit te breiden van de ingebouwde in type Array dat kun je niet doen binnen een module. Je bent extensie nodig om te leven in een ArrayEx.ts dossier en optreden buiten een modules. De reden hiervoor is dat als je het deed binnen een module zou je het verlengen van de Foo.Arraytype dat niet hetzelfde is als Array.

Maar je zei dat je gewoon wilt kunnen importeren de module om uw extra methoden laten zien en alles wat je echt moet doen is het toevoegen van een /// <reference path='ArrayEx.ts' />aan elk bestand dat u wilt dat de extension methods beschikbaar te zijn. Dit is in wezen hetzelfde.

antwoordde op 11/10/2012 om 07:07
bron van user

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more