typescript - 打字稿默认通用类型
问题描述
假设我想围绕 axios 创建一个分页包装器。在这个包装器中,我将能够转换数据负载,并添加多个其他转换器来获取最后一页或项目总数。
而且我还需要非常基本的使用默认参数(有效负载数据=数据)
但是,如果未提供默认功能,我将无法键入它们
这是我到目前为止提出的:
type PaginateOptions<T, Payload = T[]> = {
url: string;
currentPage?: number;
resultsPerPage?: number;
range?: number;
updateFn: (page?: number) => void;
options: Ref<Record<string | number, string | number>>;
dataTransformer: (payload: Payload) => Payload extends T[] ? Payload : T[];
totalPageTransformer: (payload: Payload) => number;
totalTransformer: (payload: Payload) => number;
}
// T refers to the data type I'm fetching, and Payload what the Axios payload looks like
export default function usePaginate<T, Payload>({
url,
currentPage: page = 1,
updateFn = () => {},
options = ref({}),
// Error here: Type 'Payload' is not assignable to type 'Payload extends T[] ? Payload : T[]'
dataTransformer = (results) => results,
totalPageTransformer,
totalTransformer,
resultsPerPage = 25,
range = 5,
}: PaginateOptions<T, Payload>) {
const data = ref<T[]>([]); // I'm storing the fetched data here
/* ... */
return { data };
}
有效载荷示例:
// Basic payload, with separated data and pagination info
axios.get<Payload>(url, options)
.then(({ data }) => {
// data is of type Payload
console.log(data);
/*
{
"data": [{ "name": "A", "id": 1 }, { "name": "B", "id": 2 }, { "name": "B", "id": 3 }],
"pagination": {
"total": 15,
"page": 1,
"resultsPerPage": 3
}
}
*/
});
axios.get<Payload>(url, options)
.then(({ data }) => {
// data is of type Payload
console.log(data);
/*
No pagination data, I can provide it locally if I know it is fixed (search by first letter => always 26)
[{ "name": "A", "id": 1 }, { "name": "B", "id": 2 }, { "name": "B", "id": 3 }]
*/
});
解决方案
推荐阅读
- neo4j - 在没有 WHERE 的情况下查找属性不是特定值的节点
- django - Django group by 添加不存在的选项
- css - 为什么 Ionic 4 在 iOS 10 不支持时使用 CSS 属性“包含”?
- java - 启动 Spring Boot 示例应用程序时出现问题
- javascript - 使用 javascript/jquery 从字符串元素中删除内联样式
- c# - 从xml文件c#中提取嵌套节点
- python - 自定义损失函数,它依赖于 keras 中的另一个神经网络
- camera - 当我添加 QRScanner 时,Ionic App 显示空白屏幕
- excel-formula - Power BI - 我需要一个“countif”公式来查看行/列中的唯一条目
- excel - 检查word文件是否已经打开vba