您可以确保
Columns
或者是
T
或接受功能
T
使用此类型:
interface Columns<T> {
[s: string]: keyof T | ((item: T) => string);
}
const exportAsCsv = function <T>(data: T[], columns: Columns<T>): void {
//...
}
const users = [{ id: 1, name: 'Alice', isCool: true }];
exportAsCsv(users, {
'Id': 'id',
'Name': 'name',
'Is cool': u => u.isCool ? 'Yes' : 'No',
});
exportAsCsv(users, {
'Id': 'id',
'Name': 'name2', // error
'Is cool': u => u.isCool ? 'Yes' : 'No', //error
});
也可以与调用分开创建列,但需要指定
T
:
const users = [{ id: 1, name: 'Alice', isCool: true }];
const columns : Columns<typeof users[number]> = {
'Id': 'id',
'Name': 'name',
'Is cool': u => u.isCool ? 'Yes' : 'No',
};
exportAsCsv(users, columns);