我想知道是否有一种方法可以在typescript中做到这一点。假设我有一个this接口:
interface Transaction {
amount: number;
order_date: Date;
id: string;
}
我想创建一个名为Mapper
的类型,它将把从外部API接收到的json的每个键Map到我自己的接口,例如:
const ExternalAPIMapper: Mapper = {
amount: (raw_transaction) => raw_transaction.sale_amount,
order_date: ({ transaction_date }) => dayjs(transaction_date, 'YYYY.MM.DD').toDate()),
id: ({ transaction_id }) => transaction_id
}
我创建了以下类型:
type Mapper = Record<keyof Transaction, ((t: any) => any)>
但是这个类型的问题是我的函数可以返回任何类型,我希望被类型化的函数返回与键相关联的类型,这可能吗?
如果它工作的话,我可以Map任何外部API的JSON,只需要一个Map器和这个函数:
const mapNetworkTransaction = (
object: Record<string, string>,
mapper: Mapper,
): Transaction => {
const txn = { };
for (let i = 0; i < txnFields.length; i++) {
const txnField = txnFields[i];
const accessor = mapper[txnField];
if (accessor) {
txn[txnField] = accessor(object);
}
}
return txn;
};
1条答案
按热度按时间wh6knrhe1#
您应该改用mapped type。
这将生成如下所示的类型:
Playground