2014-10-05 11 views
5

Ho una domanda qual è l'equivalente per direttiva: compilare (pre/post)?Qual è l'equivalente per direttiva, compilazione (pre/post) in TypeScript?

Esempio in javascript:

angular.module('app').directive('checkBox', function() { 
    return { 
     //... my directive options 

     compile: function() { 
      return function() { 
       pre: function (scope) {} 
       post: function (scope) {} 
      } 
     } 
    } 
}); 

Qual è dattiloscritto equivalente per questo?

+0

tipografico è proprio Javascript, quindi sarebbe lo stesso. Probabilmente vorrai semplicemente annotare i tipi di scope con ng.IScope – Martin

risposta

8

Sarà equivalente a:

public compile = (element: JQuery, attrs: angular.IAttributes, transclude: any): DirectivePrePost => { 
      return { 
       pre: ($scope: any, element: JQuery, attrs: angular.IAttributes) => { 

       }, 
       post: ($scope: any, element: JQuery, attrs: angular.IAttributes) => { 

       } 
      }; 
     } 
1

Il valore restituito da compile è errato. Si suppone che si restituisca un oggetto non una funzione:

compile: function() { 
      return { // no `function()` 
       pre: function (scope) {} 
       post: function (scope) {} 
      } 
     } 

Questo frammento di codice funzionerà come è con TypeScript.

+0

Wrong what? La tua risposta è troppo vaga. per favore correggilo – IamStalker

+2

Basarat sta dicendo che il ritorno dal valore dalla funzione di compilazione dovrebbe essere un oggetto, non una funzione. Se guardi il suo esempio, è molto chiaro. Stai restituendo function() {...} dovresti restituire un oggetto {...} – Martin

+0

Quanto riguarda la mia domanda? E 'altissimo – IamStalker

6

se si utilizza il riferimento da http://definitelytyped.org/tsd/

è come

compile = (tElem: ng.IAugmentedJQuery, tAttrs: ng.IAttributes, transclude: ng.ITranscludeFunction): ng.IDirectivePrePost => { 
      return { 
       pre: (scope: IOrderDetailDirScope, iElem: ng.IAugmentedJQuery, iAttrs: ng.IAttributes) => { 

       }, 
       post: (scope: IOrderDetailDirScope, iElem: ng.IAugmentedJQuery, iAttrs: ng.IAttributes) => { 

       } 
      }; 
     }; 
+0

Questo funziona per me. –

Problemi correlati