【发布时间】:2021-03-28 07:36:17
【问题描述】:
假设我有一个类型,它是由两项组成的任意数组:参数列表和参数与参数匹配的函数。为了方便起见,我创建了一个可以推断泛型类型的函数。
type MapParamsToFunction<A extends any[]> = [[...params: A], (...args: A) => void]
function asMap<A extends any[]>(map: MapParamsToFunction<A>): MapParamsToFunction<A> {
return map;
}
asMap([[],() => {}]) // good
asMap([[0, "Hello World", 2], (a: number, b: string, c: number) => { }]); // good
asMap([[0, "Hello World", 2], (a: number, b: number, c: number) => { }]); // error
asMap([[0, "Hello World"], (a: number, b: string, c: number) => { }]); // error
目前没有问题。现在,我想使用它并创建一个字典,其中每个键可以有不同的参数/参数列表。但是,我看不到让 TypeScript 在每个键上使用不同泛型的方法。
我尝试在类型上使用any[],但如果参数与参数不匹配,它不会引发类型错误。
type FunctionDictionary<T extends string> = {
[K in T]: MapParamsToFunction<any[]>
}
function asDictionary<T extends string>(dict: FunctionDictionary<T>): FunctionDictionary<T> {
return dict;
}
let obj = asDictionary({
"foo": [[0, "Hello World", 2], (a: number, b: number, c: number) => { }], // no type error
"bar": [["","",""], (a: string, b: string, c: string) => { }]
});
有没有办法映射这个,所以每个参数都可以有它自己的通用参数列表?
type FunctionDictionary<T extends string> = {
[K in T]: MapParamsToFunction<?> // <--- what goes here
}
【问题讨论】:
标签: typescript typescript-generics