2014-07-25 4 views
1

나는이 서비스를 가지고 :Typescript를 사용하여 AngularJS 서비스를 변경하려면 어떻게해야합니까?

app.factory('utilityService', [ 
    '$http', 
    '$angularCacheFactory', 
    utilityService 
]); 

function utilityService(
    $http, 
    $angularCacheFactory 
    ) { 

    var factory = {}; 

    factory.rowClicked = function ($index, collection) { 
     var row = collection[$index]; 
     if (row.current) { 
      row.current = false; 
      return null; 
     } else { 
      collection.forEach(function (object) { 
       object.current = false; 
      }); 
      row.current = true; 
      return $index; 
     } 
    }; 

    factory.isArrayAndNotEmpty = function (theArray) { 
     var rc = typeof theArray !== 'undefined' && theArray.length > 0; 
     return rc; 
    }; 


    return factory; 

} 

타이프 라이터는이 rowClicked (내가 공간을 절약하기 위해 여기에 표시되지 않은 다른 모든 기능)에 올 때까지 괜찮 모든 것을 인식하는 것이 나타납니다.

factory.rowClicked 

The property rowClicked does not exist on value of type '{}' 
+0

왜 수업을 사용하지 않으시겠습니까? https://www.youtube.com/watch?v=Yis8m3BdnEM&hd=1 – basarat

답변

2
var factory = {}; 

타이프 라이터가 초기화에서 factory의 유형을 유추 :이 내용은이 메시지를 제공합니다. 여기에 factory에는 멤버가 없으므로 속성을 읽거나 쓰려는 시도가 실패합니다.

당신은 단순히 anyfactory의 유형을 변경할 수 있습니다 :

var factory: any = {}; 

이것은 유효한 읽거나 factory의 속성을 작성하는 것,하지만 너무 허용 될 수 있습니다. 당신이 $indexcollection에 대한 유형이있는 경우, 당신은 더 유형 향상시킬 수

var factory: { 
    rowClicked($index, collection); 
} = <any>{}; 

: 당신은 또한 그것의 유형 밖으로 쓸 수

var factory: { 
    rowClicked($index: MyIndexService, collection: MyRowCollectionType); 
} = <any>{}; 
+0

감사합니다. 자세한 설명을 주셔서 감사합니다. 그게 뭔지 = {}; 공장에 대한 정의가 끝났습니까? –

+1

'{}'은 선언 된 타입의 멤버가 없으므로, 변수에 할당하기 위해'any'에 캐스트되어야합니다. –

+0

감사합니다. 나는 내가 갖고있는 것을 보여주기 위해 나의 대답을 업데이트했다. 마지막 질문 하나. "rowClicked ($ index, collection);"라는 정의를 결합하여 실제 함수 정의와 모두를 하나로 통합 할 수 있으므로 "factory"라는 단어를 사용할 필요조차 없습니다. –

0

당신은 서비스 타이프 라이터 클래스를 사용할 수 있습니다 그리고 당신은 것입니다 TypeAssertions (또는 수동 인터페이스)없이 더 큰 TypeSafety를 얻을 수 있습니다.

angular.factory 대신 angular.service을 사용해야합니다. 참조 : https://www.youtube.com/watch?v=Yis8m3BdnEM&hd=1

관련 문제