我有这样一个函数:
function progress<T>(data: JsonApiQueryData<T>): number {
const { links, meta } = data.getMeta();
if (!links.next) {
return 1;
}
const url = new URL(links.next);
return parseInt(url.searchParams.get('page[offset]')) / meta.total;
}
其中JsonApiQueryData
定义为:
export declare class JsonApiQueryData<T> {
protected jsonApiModels: Array<T>;
protected metaData: any;
constructor(jsonApiModels: Array<T>, metaData?: any);
getModels(): T[];
getMeta(): any;
}
正如您从progress
的主体中所看到的,我没有对底层T
类型做任何事情,所以我 * 希望 * 能够从它中删除类型参数。
天真地试图这样做,就像这样:
function progress(data: JsonApiQueryData): number {
...
}
给了我一个不幸但并不奇怪的错误:
Generic type 'JsonApiQueryData<T>' requires 1 type argument(s).
更新
我应该在最初询问的时候澄清一下,但是JsonApiQueryData
是一个库类型,我不能(轻易地)改变它。从我目前看到的(提示和相当好的)响应来看,达到 * 确切 * 我想要的最好方法是改变该类型(像class JsonApiQueryData<T = any>
或class JsonApiQueryData<T = unknown>
)。抱歉我无意中移动了目标。
2条答案
按热度按时间cuxqih211#
您可以按如下方式定义类型:
然后您可以定义不带任何类型注解的函数
progress
。代替
但对你来说应该没问题。
ngynwnxp2#
您可以改用界面。
用法: