2017-11-15 9 views
0

私は、パラメータの種類がObject.keys()何のためにあるのかを判断しようとしています、ここでは公式の宣言です(lib.es6.d.ts):活字体の種類が

interface ObjectConstructor { 
    new(value?: any): Object; 
    (): any; 
    (value: any): any; 

    ... 

    /** 
     * Returns the names of the enumerable properties and methods of an object. 
     * @param o Object that contains the properties and methods. This can be an object that you created or an existing Document Object Model (DOM) object. 
     */ 
    keys(o: any): string[]; 
} 

だから私はそうのような機能を持っている:あなたは上記を参照できるよう

v.registerMap = function (o: NotSureWhatTypeToUse): Promise<Array<any>> { 

     let keys: Array<string>; 

     try { 
      keys = Object.keys(o); // perhaps this will never throw 
     } 
     catch (err) { 
      _suman.log.error('Could not call Object.keys(o), where o is:', util.inspect(o)); 
      throw err; 
     } 

     return Promise.all(keys.map(function (k) { 

      try { 
      return valuesMap[k] = o.get(k) 
      } 
      catch (err) { 
      return valuesMap[k] = o[k]; 
      } 

     })); 
     }; 

を、私は元のパラメータは、地図またはプレーンオブジェクトである場合に対処しようとしています。

非同期ライブラリでは、同様のタイプのパラメータに対してTypeScriptタイプとしてDictionary<{}>が使用されます。それは私が探しているものですか?非同期ライブラリで

、このタイプは、次のようになります。

export interface Dictionary<T> { [key: string]: T; } 

私が探していますおそらく1。私は混乱しています事は、しかし、ジェネリック医薬品は、非同期ライブラリでどのように働くかある

type PlainObj = {} 

v.registerMap = function (o: PlainObj): Promise<Array<any>> {...}; 

1:

+0

上記のコードからエラーが発生するか、または何らかの方法で正しく機能しないのですか? 'valuesMap'とは何ですか? 'Object.keys'は' null'または 'undefined'のエラーを投げますが、通常はオブジェクト以外の値の空の配列を取得します –

+0

JSの中でもっともトリッキーなことの一つです。エラーかどうか。 Object.keys()が投げるかどうかはわかりません。 –

+0

しかし、質問は何を求めているのですか、私はどのようなタイプの関数に制限するべきか、 'type t = {}'が動作すると思います。 –

答えて

0

私は、行うための最善のことは、単なるオブジェクトへの入力を制限することです。このような何かを考えます。非同期libの辞書を使用するので、同じよう:

export interface Dictionary<T> { [key: string]: T; } 

私はDictionary<any>PlainObjと異なっているのか分かりません。