具有给定类型的通用类型的键的类型

时间:2020-10-28 14:10:48

标签: typescript

这听起来很奇怪,所以一个示例可以更好地定义问题:

具有Model,我不需要键K,其中Model[K]是给定类型GivenType(非通用)。

因此,我想一个不错的开始是<Model, K extends keyof Model>,但这并不能使Model[K]的类型为GivenType

1 个答案:

答案 0 :(得分:1)

来自documentation

type NonFunctionPropertyNames<T> = {
  [K in keyof T]: T[K] extends Function ? never : K;
}[keyof T];

interface Part {
  id: number;
  name: string;
  subparts: Part[];
  updatePart(newName: string): void;
}

type T41 = NonFunctionPropertyNames<Part>; // "id" | "name" | "subparts"

所以,在我们的例子中:

type ModelProperty<T> = {
  [K in keyof T]: T[K] extends Model ? K : never;
}[keyof T];