首页 > 解决方案 > 具有给定类型的泛型键的类型

问题描述

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

拥有一个Model,我不想要给定类型(非通用)K的键。Model[K]GivenType

所以我想一个好的开始会是<Model, K extends keyof Model>,但这并不强制Model[K]是 type GivenType

标签: typescript

解决方案


文档

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];

推荐阅读