繁体   English   中英

如何让 Typescript 从通用类型列表中的 Array.map 调用推断特定类型?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM