2017-12-07 4 views
0

このタイスクリプトエラーを解決する方法はわかりません。私はRAMDAのGROUPBY機能を使用しようとしている:ramda groupbyを使用してtypecriptのタイプエラーを解決してください

245: const groups = R.groupBy((row: Record) => { 
246:   return row[this.props.groupBy] 
247:  })(this.props.data) 
this.props.groupByは次のように定義されて

groupBy?: {[K in keyof Record]} 
data: Array<Record> 

私が手にエラーがある:

Error:(245, 38) TS2345:Argument of type '(row: Record) => <T>(obj: any) => T' is not assignable to parameter of type '(a: Record) => string'. 
    Type '<T>(obj: any) => T' is not assignable to type 'string'. 

Error:(246, 31) TS2683:'this' implicitly has type 'any' because it does not have a type annotation. 

EDIT:私はkeyofの型に苦しんでいないと決めただけで、それを文字列としてgroupByと宣言しました。私はこれらが私の本当の誤りだとは思わないが、intellijはエラーメッセージの更新に問題があったので、誰が知っている。彼らは今離れてしまった。

答えて

1

は、あなたの質問にはいくつかの問題があり、固定コードは簡単に動作するようになった:

namespace X { 

    class Record { 
     Test: string; 
     Bla: string; 
     test: number; 
    } 

    class TT { 
     props: { 
      groupBy?: keyof Record, 
      data: Array<Record> 
     } 
     name() { 
      const groups = R.groupBy((row: Record) => { 
       return row[this.props.groupBy].toString(); 
      })(this.props.data) 
     } 
    } 
} 

問題があった。

  1. groupBykeyof Recordない{[K in keyof Record]}でなければなりません。最初のものは、Recordのプロパティの任意の名前を取ることができるタイプを定義します。あなたのバージョンは、Recordと同じ構造を持ちますが、タイプanyのすべてのプロパティを持つタイプが定義されています。

  2. groupByrow上のインデックス操作はレコードのプロパティの任意の型を返すことができますが、特にあなたが文字列にすべてを変換するために.toStringを行う必要があります(上記の例ではEX string|number)、戻り値の型が文字列になりたい

注:は、私はあなたがstrictで他のエラーを取得する可能性がありますが、オプションは言及していないので、私は標準を想定し、標準のコンパイラ設定を使用していました。私はTS 2.6.2でテストし、npmからRamdaの最新のタイピングをテストしたが、他のバージョンはエラーが異なるかもしれない。

0

あなたはanyに型アサーションを使用することができますRAMDAのGROUPBY

を使用してtypescriptですタイプエラーを克服:

245: const groups = (R as any).groupBy((row: Record) => { 
246:   return row[this.props.groupBy] 
247:  })(this.props.data) 

もっと

+0

'R'が何であるべきなのか、なぜこのライブラリの型定義があるのか​​、彼はおそらく何か別のことをやっているのか分かりません。 –

関連する問題