【发布时间】:2018-08-15 23:01:30
【问题描述】:
定义通用表。这需要数据和如何显示它的模式。这是一个如何调用它的简化示例。
<PagedTable
data={[ username: 'rob', logins: 32 ]}
schema={[
{
key: 'username',
customRender: (targetData, row) => fnThatOnlyTakesStrings(targetData)
}
]}
/>
组件类具有以下签名:
class PagedTable<T> extends Component<Props<T>, any>
还有道具:
interface Props<T> {
data: T[] | null | undefined
schema: ColumnDef<T>[]
}
interface ColumnDef<T> {
key?: keyof T
customRender?: <U extends keyof T>(
targetData: T[U],
rowData: T
) => string | JSX.Element
}
所以类的具体类型推断正确。
为了完整起见,在 PagedTable 内部,单元格的简化渲染函数是:
renderCell(datum: T, { customRender, key }: ColumnDef<T>) {
if (customRender) {
return customRender(datum[key!], datum, key!)
} else {
return datum[key]
}
}
我想要的是targetData 在使用 customRender 函数时获得正确的类型。在此设置中,它的类型是 number | string,这是不正确的。
有没有办法仅使用架构对象的key 属性来推断类型(保证是数据对象的键)?
【问题讨论】:
标签: typescript types