2017-02-17 10 views
-1

汎用クラスフィールドを汎用ローカルフィールドに正しく割り当てるにはどうすればよいですか?私は、例えば、データソースからのエントリを取得したい私は機能を持っているTypescriptジェネリック変数フィールドにジェネリックを割り当てる方法

export interface TableBoxProps<T> { 
    getDataSource: <T>() => T[]; 
} 

class Container<T> extends React.Component<TableBoxProps<T>, any>{ ... } 

とどこかの一般的なクラスで実装この汎用的なインタフェースを持っ例えば

この

private onCellClick = (row: number, column: number) => { 
     let entity:T = this.props.getDataSource()[row]; // error 
    } 

のように私は上記の

[ts] Type '{}' is not assignable to type 'T' 

でエラーを取得する私は、私はlet entity:Tを使用できることを変更することがありますか?それはタイプanyでうまく動作しますが、私はそれをしたくありません。

答えて

2

これは、this.props.getDataSource()[row]{}であるために発生します。あなたはTにキャストする必要があります。

let entity: T = (this.props.getDataSource()[row] as T); 

あなたはJSXと反応を使用しているので、あなたがas Tではなく<T>を使用する必要があります。

+0

Thx。私はReactJを使っているので、 'this.props.getDataSource()[row]をTにキャストしなければなりませんでした。 –

+0

しかし、私がジェネリッククラスに入っているときになぜそれを 'T'にキャストしなければならないのか説明できますか? –

+0

あなたのクラス定義を表示してください - そこにあるかもしれません –

関連する問題