2017-03-17 96 views
1

考慮下面的代碼來定義與通用類型參數TRow一個陣營組分:如何用泛型類型參數定義變量?

function DataTable<TRow> ({ rows: TRow[] }) { 
    return (
) 
} 

在前面的代碼中,使用ES6和組件被定義爲無狀態的功能:

const DataTable = ({ rows }) => (...) 

我怎樣才能定義這樣一個函數,使其具有泛型類型參數TRow?這是否受到Typescript的支持?

+0

我完全把你的問題弄錯了,我不明白爲什麼你想要一個函數在常量上。也許你可以做公共靜態yourFunction (somearg:T){} ??? –

+0

是的,就像我在問題中所展示的一樣,我可以使用函數DataTable ...定義它。然而,因爲所有的代碼都使用類似'const DataTable = ...'的代碼,所以我認爲保持相同的語法是很好的,但不知何故添加了泛型。 –

回答

0

是的,你完全可以用打字稿做你想做的事。

讓我們假設你將使用類型參數保持器TRow(可以是任何類型的行)將通用類型包裝在通用接口DataTableProps中。

interface DataTableProps<TRow> { 
     items: Array<TRow> 
    } 

現在,您想在您的反應組件類中使用該屬性類型。因此,假設您的組件是無狀態的,我們將使用React.SFC類型來指代無狀態響應組件。

function getDataTableComp<TRow>() : React.SFC<DataTableProps<TRow>>{ 
     return props => <div> 
      <p>{props.items.toString()}</p> 
     </div> 
    } 

這是一個返回特定類型的無狀態反應分量的函數。然後,我們可以使用該功能的,

const MyStringDataTable = getDataTableComp<string>(); 

現在,我們有一個特定的數據表類型,串行的,即數據表。然後,我們可以用一個實例作爲

ReactDOM.render(<MyStringDataTable items={['a', 'b']} />, document.getElementById('page-root')) 

您將獲得a,b呈現在你的頁面。