0

OK、私は状態プロバイダのリファレンスを閉じることができるプロバイダを用意したいと思っていました。だから、私はJSコードを持っていると私はTSに移行しようとしている。これは私がこれまで行ってきたことですが、なんらかの理由でこのようなメソッドがないと不平を言っています(プロパティ 'get'はタイプ 'IReferenceProvider'には存在しません。 'IReferenceProviderGetterInterface'メソッドはうまくやっているようですが、私は正しいとは思わない「injectRef」メソッドを失っているので、正しい場所にインターフェイスがあると思います)。誰もが前にこの問題を抱えていた、私が間違っていることを指摘することはいいだろう。問題をgoogle-ingしてみましたが、すべてがわかります。

export interface IReferenceProvider extends angular.IServiceProvider { 
    injectRef(name: string, ref: angular.ui.IUrlRouterProvider | angular.ui.IStateProvider): void; 
} 

export interface IReferenceProviderGetterInterface { 
    get(name: string): angular.ui.IUrlRouterProvider | angular.ui.IStateProvider; 
} 

class ReferenceProvider implements IReferenceProvider { 
    private refs: { [key: string]: angular.ui.IUrlRouterProvider | angular.ui.IStateProvider } = {}; 

    $get(): IReferenceProviderGetterInterface { 
     return { 
      get: (name: string): angular.ui.IUrlRouterProvider | angular.ui.IStateProvider => { 
       return this.refs[name]; 
      } 
     }; 
    } 

    injectRef(name: string, ref: angular.ui.IUrlRouterProvider | angular.ui.IStateProvider): void { 
     this.refs[name] = ref; 
    } 
} 

angular.module("app") 
    .provider("refs", ReferenceProvider); 
} 

と、私はこれを使用している方法です::とにかく、ここでのスニペットがある機能getが本当にdoesntのIReferenceProvider上に存在し

static $inject: Array<string> = ["refs"]; 

private $stateProvider: angular.ui.IStateProvider; 

constructor(refs: IReferenceProvider) { 
     this.$stateProvider = refs.get("$stateProvider"); 
... 
} 

答えて

0

、それだけで機能$getを持っています。あなたはまた、ReferenceProvider自体にget関数を配置する必要があるだろうやりたいために

export interface IReferenceProvider extends angular.IServiceProvider, IReferenceProviderGetterInterface { 
    injectRef(name: string, ref: angular.ui.IUrlRouterProvider | angular.ui.IStateProvider): void; 
} 

class ReferenceProvider implements IReferenceProvider { 
    private refs: { [key: string]: angular.ui.IUrlRouterProvider | angular.ui.IStateProvider } = {}; 

    $get(): IReferenceProviderGetterInterface { 
     return { 
      get: (name: string): angular.ui.IUrlRouterProvider | angular.ui.IStateProvider => { 
       return this.refs[name]; 
      } 
     }; 
    } 

    get: (name: string): angular.ui.IUrlRouterProvider | angular.ui.IStateProvider => { 
     return this.refs[name]; 
    } 

    injectRef(name: string, ref: angular.ui.IUrlRouterProvider | angular.ui.IStateProvider): void { 
     this.refs[name] = ref; 
    } 
} 

この機能はサービスにしても、プロバイダで利用できるようになります。

+0

私はこれも試してみたのですが、元のJSで書かれたものとは少し異なるコードを出すので、確信が持てませんでした。私はインターネット上のいくつかの他のガイドをチェックして、彼らは私がそれを持っていた方法を完了しましたが、これは今になっていると思いますか? – Meshko

+0

ええ、これはうまくいくはずです。代わりに、 'refs。$ get()。get(" $ stateProvider ");'のように単にプロバイダを使うこともできますが、それは私には間違っているようです... – Nayish

+0

大丈夫..あなたは芽吹く! – Meshko