2017-11-04 1 views
0

현재, 나는 TypeScript을 확인하려고합니다. 내 옛날 JavaScript -source에이름 기반 객체 배열을 만드는 방법은 무엇입니까?

내가는 EventListener를위한 간단한 namebased 배열 개체가 :

let _events \t \t = {}; 
 

 
this.addEventListener = function addEventListener(name, callback) { 
 
\t \t if(typeof(_events[name]) == 'undefined') { 
 
\t \t \t _events[name] = []; 
 
\t \t } 
 
\t \t 
 
\t \t _events[name].push(callback); 
 
\t }; 
 
\t 
 
\t this.fireEvent = function fireEvent() { 
 
\t \t let fired \t = false; 
 
\t \t let args \t = new Array(); 
 
\t \t let name \t = arguments[0]; 
 
\t \t 
 
\t \t if(typeof(_events[name]) == 'undefined') { 
 
\t \t \t return; 
 
\t \t } 
 
\t \t 
 
\t \t for(var index = 1; index < arguments.length; index++) { 
 
\t \t \t args.push(arguments[index]); 
 
\t \t } 
 
\t 
 
\t \t _events[name].forEach(function onEvent(event) { 
 
\t \t \t fired = true; 
 
\t \t \t event.apply(this, args); 
 
\t \t }.bind(this)); 
 
\t \t 
 
\t \t return fired; 
 
\t };

내가 타이프에서 같은 방법을 만들 수 있습니까?

{ 
    "init": [callback, callback, callback], 
    "otherEvent": [callback, callback] 
} 

답변

0

당신은 같은 사용 타이프 최신 ES6의 일부 기능을 구현할 수 : 여기

은 샘플 결과입니다. 예를 들어, 대신 당신이 ES6의지도 사용할 수있는 키/값 맵으로 객체 _events를 사용 : 나는`지도`로 내보낼 때

class EventManager { 

    private _events: Map<string, Array<Function>>; 

    public addEventListener(name: string, callback: Function) { 
     if(this._events.has(name) === false) { 
      this._events.set(name, [callback]); 
     } else { 
      const previosCallbacks = this._events.get(name); 
      previosCallbacks.push(callback); 
      this._events.set(name, previosCallbacks); 
     } 
    } 

    public fireEvent(name: string, ...args: any[]) { 

     let fired = false; 

     if (this._events.has(name) === false) { 
      return; 
     } 

     this._events.get(name).forEach((cb) => { 
      fired = true; 
      cb(...args); 
     }); 

     return fired; 
    } 

} 
+0

,이 클래스가 컴파일 한 후 찾을 수없는 것 (사용'ES5'/'ES2015'). 나는 이미 너와 같은지도를 사용하려고 시도했다. .. –

+0

이전 버전의 nodejs 나 웹 브라우저에서 코드를 실행하려고한다면 Map을 사용할 수 없지만 Shim을 사용할 수는있다. 예를 들어 corejs 같은 경우 https://github.com/zloirock/core-js#map –

+0

'Map'이 정의되지 않았기 때문에 문제가 발생하면''target ":"es5 "'를 사용할 필요가있을뿐만 아니라 ''lib ": ["es6 "]'''tsconfig.json' –

관련 문제