前提・実現したいこと
React Tableの紹介を参考に、React-Tableを使用したデータテーブルを作成しています。
今回の問題は【フィルター付きテーブル】の部分です。
以下へ記載するJavaScriptをTypeScriptへ変換したところ、エラーが発生しました。
一部のエラーが解決できませんでしたので、ご助力よろしくお願いいたします。
TypeScript 21行目の"[id]"部分
型 'string[]' はインデックスの型として使用できません。ts(2538)
該当のソースコード
javascript
1import React, { useMemo } from 'react'; 2 3export const columns = [ 4 { 5 Header: 'Name', 6 Footer: info => `Count: ${info.rows.length}`, 7 columns: [ 8 { 9 Header: 'First Name', 10 Footer: <hr />, 11 accessor: 'firstName', 12 filter: (rows, id, filterType) => rows.filter(row => row.values[id].startsWith(filterType)), 13 }, 14 { 15 Header: 'Last Name', 16 accessor: 'lastName', 17 }, 18 ], 19 }, 20 { 21 Header: 'Information', 22 columns: [ 23 { 24 Header: 'Age', 25 accessor: 'age', 26 }, 27 { 28 Header: 'Gender', 29 accessor: 'gender', 30 }, 31 { 32 Header: info => { 33 const message = useMemo( 34 () => { 35 if (info.rows.length === 0) { 36 return 'Unknown'; 37 } 38 const range = info.rows.reduce((sum, row, i) => { 39 if (i === 0) { 40 return sum; 41 } 42 return {min: Math.min(sum.min, row.values.grade), max: Math.max(sum.max, row.values.grade)} 43 }, {min: info.rows[0].values.grade, max: info.rows[0].values.grade}); 44 return `${range.min} - ${range.max}`; 45 }, 46 [info.rows] 47 ) 48 49 return `Grade: (${message})` 50 }, 51 accessor: 'grade', 52 }, 53 ], 54 }, 55];
TypeScript
1import React, { useMemo } from 'react'; 2import { Column } from "react-table"; 3 4export interface Data { 5 firstName: string; 6 lastName: string; 7 age: number; 8 gender: string; 9 grade: number; 10} 11 12export const columns: Column<Data>[] = [ 13 { 14 Header: 'Name', 15 Footer: info => `Count: ${info.rows.length}`, 16 columns: [ 17 { 18 Header: 'First Name', 19 Footer: <hr />, 20 accessor: 'firstName', 21 filter: (rows, id, filterType) => rows.filter(row => row.values[id].startsWith(filterType)), 22 }, 23 { 24 Header: 'Last Name', 25 accessor: 'lastName', 26 }, 27 ], 28 }, 29 { 30 Header: 'Information', 31 columns: [ 32 { 33 Header: 'Age', 34 accessor: 'age', 35 }, 36 { 37 Header: 'Gender', 38 accessor: 'gender', 39 }, 40 { 41 Header: info => { 42 const message = useMemo( 43 () => { 44 if (info.rows.length === 0) { 45 return 'Unknown'; 46 } 47 const range = info.rows.reduce((sum, row, i) => { 48 if (i === 0) { 49 return sum; 50 } 51 return {min: Math.min(sum.min, row.values.grade), max: Math.max(sum.max, row.values.grade)} 52 }, {min: info.rows[0].values.grade, max: info.rows[0].values.grade}); 53 return `${range.min} - ${range.max}`; 54 }, 55 [info.rows] 56 ) 57 58 return `Grade: (${message})` 59 }, 60 accessor: 'grade', 61 }, 62 ], 63 }, 64];
試したこと
any型やtoString()でエラー回避はできます。
しかし、根本的な解決ではありませんでした。
補足情報(FW/ツールのバージョンなど)
TypeScript
JavaScript
React-Table
VSCode
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2021/12/20 01:06