[英]How to get Typescript to infer a specific type from an Array.map call from generic list of types?
以下代码有效:
interface Model {
keyFromModel: string;
anotherKeyFromModel: number;
}
export const getKeyLoader = <T, K extends keyof T>(model: mongoose.Model<T & mongoose.Document>, key: K, one: boolean) => {
type inputType = NonNullable<T[K]>; // this becomes type "string"
}
我可以这样称呼它
getKeyLoader(model, "keyFromModel", true).load()
...并且 K 的类型是“keyFromModel”。
但是我希望加载器参数接受来自 model 接口的键数组。
export const getLoadersForModel = <T, K extends keyof T>(model: mongoose.Model<T & mongoose.Document>, loaders: K[]) => {
const dataLoaders = loaders.map((key) => { // key is inferred as keyof T
const test = getKeyLoader(model, key, true);
return test;
});
}
/// ... in getKeyLoader ...
// type inputType = NonNullable<T[K]>; // K becomes a union of all `keyof T ` and inputType becomes `any`
而是将keyof Model
类型的完整联合集传递给getKeyLoader
,而我只想要Array.map
调用和字符串文字类型的迭代中的密钥。
显然我有另一个包装器 function 我忘了:
<T>(name: string, types: string, loaders: (keyof T)[]) => {
...getKeyLoader(...)
}
我将其更改为此以解决问题:
<T, K extends keyof T>(name: string, types: string, loaders: K[])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.