[英]How to specialize a generic type in object literal?
// a.ts
interface Config {
selector?: <T>(httpResponse: HttpResponse<T>) => unknown;
}
export function factory(options: Config): something {
// use options to return something
}
// another file b.ts
// I have a type for res only here(b.ts), and I want to use it to specialize type T
import { factory } from 'a.ts';
factory({
selector: res => res.data.data; // error: Property 'data' does not exist on type 'T'
});
我的問題是:如何在配置 object 文字中傳遞指定的類型,以便可以專門化泛型類型 T?
我不知道您的確切用例是什么,但您可以將類型添加到您的界面,如下所示:
interface Config<T> {
selector?: (httpResponse: T) => unknown;
}
function factory(options: Config<{ data: { data: string } }>) {
// use options to return something
return options;
}
factory({
selector: (res) => res.data.data,
});
將factory
設為通用 function,我們可以將factory
的“T”傳遞給Config
,這也是通用 object。
從Config
接口開始,使其成為通用接口。
interface Config<T> { // Generically for whole interface
selector?: (httpResponse: HttpResponse<T>) => unknown;
}
接下來, factory
function:
export function factory<T>(options: Config<T>): something { // return type is "T" or something ?
// use options to return something
}
我們將類型“T”從factory
傳遞給Config
。
最后,舉個例子:
b.ts
export type ApiResponse = {
data: {
username: string;
}
}
工廠使用
factory<ApiResponse>({
selector: res => res.data.data.username, // typehint for the `res`, I try with HttpResponse is AxiosResponse
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.