gpt4 book ai didi

javascript - 如何向 TypeScript 正确添加带参数的回调类型?

转载 作者:行者123 更新时间:2023-12-02 22:58:08 24 4
gpt4 key购买 nike

我有这个方法:

export default class ApiService {
static makeApiCall = (
url: string,
normalizeCallback: (d: ResponseData) => ResponseData | null,
callback: (d: any) => any
): Promise<void> => (
ApiClient.get(url)
.then(res => {
callback(normalizeCallback(res.data));
})
.catch(error => {
console.error(`ApiClient ${url}`, error);
})
)

static getArticles = (callback: (a: Article[]) => void): Promise<void> => (
ApiService.makeApiCall(
'articles',
ApiNormalizer.normalizeArticles,
callback
)
)
}

在这一行回调:(d:any)=>any typescript 大喊

warning Unexpected any. Specify a different type

为了向您展示更多上下文,我在此处调用方法 getArticles

export const fetchArticles = (): ThunkAction<Promise<void>,{},{},AnyAction> => {
return async (dispatch: ThunkDispatch<{}, {}, AnyAction>): Promise<void> => {
dispatch(() => ({ type: FETCH_ARTICLES }));
// HERE: getArticles
return ApiService.getArticles(articles => dispatch(loadArticles(articles)));
};
};

那么我怎样才能正确输入回调函数呢?

最佳答案

我会把它写成:

function makeApi<T>(url: string, normalizeCallback: (d: ResponseData) => T | null) {
return function(callback: (data: T | null) => any) {
return ApiClient.get(url)
.then(res => {
callback(normalizeCallback(res.data));
})
.catch(error => {
console.error(`ApiClient ${url}`, error);
});
};
}

// in the class
static getArticles = makeApi<Article[]>("articles", ApiNormalizer.normalizeArticles)

这样,你...

1) 正确输入通用数据类型。

2)消除大量样板文件。

3) 将 makeApi 封装到模块中,我认为它不应该通过类公开。

关于javascript - 如何向 TypeScript 正确添加带参数的回调类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57896660/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com